mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-20 21:35:42 +02:00
chore: use gulp
instead of grunt
This commit is contained in:
parent
17bce6b835
commit
edfd052c4c
21 changed files with 2021 additions and 1487 deletions
41
.jshintrc
Normal file
41
.jshintrc
Normal file
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"esversion": 6,
|
||||
"curly": true,
|
||||
"eqeqeq": false,
|
||||
"regexp": false,
|
||||
"nonew": false,
|
||||
"latedef": false,
|
||||
"forin": false,
|
||||
"globalstrict": false,
|
||||
"node": true,
|
||||
"immed": true,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"bitwise": true,
|
||||
"sub": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"trailing": true,
|
||||
"devel": true,
|
||||
"jquery": true,
|
||||
"nonstandard": true,
|
||||
"boss": true,
|
||||
"eqnull": true,
|
||||
"browser": true,
|
||||
"debug": true,
|
||||
"globals": {
|
||||
"casper": true,
|
||||
"Raphael": true,
|
||||
"require": true,
|
||||
"console": true,
|
||||
"describe": true,
|
||||
"expect": true,
|
||||
"it": true,
|
||||
"runs": true,
|
||||
"waitsFor": true,
|
||||
"exports": true,
|
||||
"module": true,
|
||||
"prompt": true,
|
||||
"process": true
|
||||
}
|
||||
}
|
|
@ -12,5 +12,5 @@ cache:
|
|||
- "node_modules"
|
||||
script:
|
||||
- ./checkgit.sh "Source files were modified before build; is yarn.lock out of sync with package.json?" || travis_terminate $?
|
||||
- yarn grunt
|
||||
- yarn gulp
|
||||
- ./checkgit.sh "Source files were modified by the build" || travis_terminate $?
|
||||
|
|
252
Gruntfile.js
252
Gruntfile.js
|
@ -1,252 +0,0 @@
|
|||
var _ = require('underscore');
|
||||
var fs = require('fs');
|
||||
var babelify = require('babelify');
|
||||
|
||||
// Haha, this is so tricky. so we have a template for index.html to stick
|
||||
// in the hashed JS and style files -- that template also contains
|
||||
// templates used in the app. in order to avoid evaluating those
|
||||
// templates, we change the regexes so we can effectively nest templates
|
||||
_.templateSettings.interpolate = /\{\{(.+?)\}\}/g;
|
||||
_.templateSettings.escape = /\{\{\{(.*?)\}\}\}/g;
|
||||
_.templateSettings.evaluate = /\{\{-(.*?)\}\}/g;
|
||||
|
||||
// precompile for speed
|
||||
var indexFile = fs.readFileSync('src/template.index.html').toString();
|
||||
var indexTemplate = _.template(indexFile);
|
||||
|
||||
/**
|
||||
* This is SUPER jank but I can't get the underscore templating to evaluate
|
||||
* correctly with custom regexes, so I'm just going to use interpolate
|
||||
* and define the strings here.
|
||||
*/
|
||||
|
||||
var prodDependencies = [
|
||||
'<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.1.1/es5-shim.min.js"></script>',
|
||||
'<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>',
|
||||
'<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>'
|
||||
];
|
||||
|
||||
var devDependencies = [
|
||||
'<script src="lib/jquery-1.8.0.min.js"></script>',
|
||||
'<script src="lib/raphael-min.js"></script>',
|
||||
'<script src="lib/es5-shim.min.js"></script>'
|
||||
];
|
||||
|
||||
/*global module:false*/
|
||||
module.exports = function(grunt) {
|
||||
// eventually have sound...?
|
||||
grunt.registerTask('compliment', 'Stay motivated!', function() {
|
||||
var compliments = grunt.config('compliment.compliments');
|
||||
var index = Math.floor(Math.random() * compliments.length);
|
||||
|
||||
grunt.log.writeln(compliments[index]);
|
||||
});
|
||||
|
||||
grunt.registerTask('lintStrings', 'Find if an INTL string doesn\'t exist', function() {
|
||||
var child_process = require('child_process');
|
||||
child_process.exec('node src/js/intl/checkStrings', function(err, output) {
|
||||
grunt.log.writeln(output);
|
||||
});
|
||||
});
|
||||
|
||||
var buildIndex = function(config) {
|
||||
grunt.log.writeln('Building index...');
|
||||
|
||||
// first find the one in here that we want
|
||||
var buildFiles = fs.readdirSync('build');
|
||||
|
||||
var hashedMinFile;
|
||||
if (buildFiles.length == 2) {
|
||||
grunt.log.writeln('Assuming debug mode wanted');
|
||||
hashedMinFile = 'bundle.js';
|
||||
}
|
||||
var jsRegex = /bundle\.min\.\w+\.js/;
|
||||
buildFiles.forEach(function(jsFile) {
|
||||
if (jsRegex.test(jsFile)) {
|
||||
if (hashedMinFile) {
|
||||
throw new Error('more than one hashed file: ' + jsFile + hashedMinFile);
|
||||
}
|
||||
hashedMinFile = jsFile;
|
||||
}
|
||||
});
|
||||
if (!hashedMinFile) { throw new Error('no hashed min file found!'); }
|
||||
|
||||
grunt.log.writeln('Found hashed js file: ' + hashedMinFile);
|
||||
|
||||
var styleRegex = /main\.\w+\.css/;
|
||||
var hashedStyleFile;
|
||||
buildFiles.forEach(function(styleFile) {
|
||||
if (styleRegex.test(styleFile)) {
|
||||
if (hashedStyleFile) {
|
||||
throw new Error('more than one hashed style: ' + styleFile + hashedStyleFile);
|
||||
}
|
||||
hashedStyleFile = styleFile;
|
||||
}
|
||||
});
|
||||
if (!hashedStyleFile) { throw new Error('no style found'); }
|
||||
|
||||
grunt.log.writeln('Found hashed style file: ' + hashedStyleFile);
|
||||
|
||||
// output these filenames to our index template
|
||||
var outputIndex = indexTemplate({
|
||||
jsFile: hashedMinFile,
|
||||
styleFile: hashedStyleFile,
|
||||
jsDependencies: config.isProd ?
|
||||
prodDependencies.join("\n") :
|
||||
devDependencies.join("\n")
|
||||
});
|
||||
fs.writeFileSync('index.html', outputIndex);
|
||||
};
|
||||
|
||||
grunt.registerTask('buildIndex', 'stick in hashed resources', buildIndex.bind(null, {isProd: true}));
|
||||
grunt.registerTask('buildIndexDev', 'stick in hashed resources', buildIndex.bind(null, {isProd: false}));
|
||||
|
||||
grunt.initConfig({
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
jshint: {
|
||||
all: [
|
||||
'Gruntfile.js',
|
||||
'__tests__/*.spec.js',
|
||||
'src/js/**/*.js',
|
||||
'src/js/**/**/*.js',
|
||||
'src/levels/**/*.js'
|
||||
],
|
||||
options: {
|
||||
esversion: 6,
|
||||
curly: true,
|
||||
// sometimes triple equality is just redundant and unnecessary
|
||||
eqeqeq: false,
|
||||
// i know my regular expressions
|
||||
regexp: false,
|
||||
// i think it's super weird to not use new on a constructor
|
||||
nonew: false,
|
||||
// these latedefs are just annoying -- no pollution of global scope
|
||||
latedef: false,
|
||||
// use this in mocks
|
||||
forin: false,
|
||||
// This gets annoying
|
||||
globalstrict: false,
|
||||
// for use strict warnings
|
||||
node: true,
|
||||
///////////////////////////////
|
||||
// All others are true
|
||||
//////////////////////////////
|
||||
immed: true,
|
||||
newcap: true,
|
||||
noarg: true,
|
||||
bitwise: true,
|
||||
sub: true,
|
||||
undef: true,
|
||||
unused: false,
|
||||
trailing: true,
|
||||
devel: true,
|
||||
jquery: true,
|
||||
nonstandard: true,
|
||||
boss: true,
|
||||
eqnull: true,
|
||||
browser: true,
|
||||
debug: true,
|
||||
reporterOutput: '',
|
||||
globals: {
|
||||
casper: true,
|
||||
Raphael: true,
|
||||
require: true,
|
||||
console: true,
|
||||
describe: true,
|
||||
expect: true,
|
||||
it: true,
|
||||
runs: true,
|
||||
waitsFor: true,
|
||||
exports: true,
|
||||
module: true,
|
||||
prompt: true,
|
||||
process: true
|
||||
}
|
||||
},
|
||||
},
|
||||
compliment: {
|
||||
compliments: [
|
||||
"Wow peter great work!",
|
||||
"Such a professional dev environment",
|
||||
"Can't stop the TRAIN",
|
||||
"git raging"
|
||||
]
|
||||
},
|
||||
hash: {
|
||||
options: {
|
||||
mapping: ''
|
||||
},
|
||||
js: {
|
||||
src: 'build/bundle.min.js',
|
||||
dest: 'build/'
|
||||
},
|
||||
css: {
|
||||
src: 'src/style/main.css',
|
||||
dest: 'build/'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
files: '<config:lint.files>',
|
||||
tasks: 'watching'
|
||||
},
|
||||
uglify: {
|
||||
build: {
|
||||
src: ['build/bundle.js'],
|
||||
dest: 'build/bundle.min.js'
|
||||
}
|
||||
},
|
||||
clean: ['build/*'],
|
||||
shell: {
|
||||
gitAdd: {
|
||||
command: 'git add build/'
|
||||
}
|
||||
},
|
||||
jasmine_node: {
|
||||
projectRoot: './__tests__/',
|
||||
forceExit: true,
|
||||
verbose: true,
|
||||
requirejs: false
|
||||
},
|
||||
env: {
|
||||
prod: {
|
||||
NODE_ENV: 'production',
|
||||
},
|
||||
},
|
||||
browserify: {
|
||||
options: {
|
||||
transform: [babelify.configure({
|
||||
presets: ['@babel/preset-react']
|
||||
})]
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'build/bundle.js': [
|
||||
'src/**/*.js',
|
||||
'src/**/*.jsx'
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// all my npm helpers
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-browserify');
|
||||
grunt.loadNpmTasks('grunt-hash');
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-shell-spawn');
|
||||
grunt.loadNpmTasks('grunt-jasmine-node');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify-es');
|
||||
grunt.loadNpmTasks('grunt-env');
|
||||
|
||||
grunt.registerTask('build',
|
||||
['clean', 'env', 'browserify', 'uglify', 'hash', 'buildIndex', 'shell:gitAdd', 'jasmine_node', 'jshint', 'lintStrings', 'compliment']
|
||||
);
|
||||
grunt.registerTask('lint', ['jshint', 'compliment']);
|
||||
grunt.registerTask('fastBuild', ['clean', 'browserify', 'hash', 'buildIndexDev', 'jshint']);
|
||||
grunt.registerTask('watching', ['fastBuild', 'jasmine_node', 'jshint', 'lintStrings']);
|
||||
|
||||
grunt.registerTask('default', ['build']);
|
||||
grunt.registerTask('test', ['jasmine_node']);
|
||||
grunt.registerTask('casperTest', ['shell:casperTest']);
|
||||
};
|
|
@ -32,61 +32,21 @@ var expectLevelAsync = function(headless, levelBlob) {
|
|||
return;
|
||||
}
|
||||
|
||||
var hasWarned = false;
|
||||
var start;
|
||||
runs(function() {
|
||||
start = Date.now();
|
||||
headless.sendCommand(command);
|
||||
return headless.sendCommand(command).then(function() {
|
||||
expect(compareLevelTree(headless, levelBlob)).toBeTruthy();
|
||||
});
|
||||
waitsFor(function() {
|
||||
var diff = (Date.now() - start);
|
||||
if (diff > TIME - 10 && !hasWarned) {
|
||||
hasWarned = true;
|
||||
console.log('this goal tree', loadTree(levelBlob.goalTreeString));
|
||||
console.log('not going to match with command', command);
|
||||
console.log(getHeadlessSummary(headless));
|
||||
}
|
||||
var result = compareLevelTree(headless, levelBlob);
|
||||
if (result) {
|
||||
console.log('solved level ' + levelBlob.name.en_US);
|
||||
}
|
||||
return result;
|
||||
}, 'trees should be equal', TIME);
|
||||
};
|
||||
|
||||
var expectTreeAsync = function(command, expectedJSON, startJSON) {
|
||||
var headless = new HeadlessGit();
|
||||
var start = Date.now();
|
||||
var haveReported = false;
|
||||
|
||||
if (startJSON) {
|
||||
headless.gitEngine.loadTreeFromString(startJSON);
|
||||
}
|
||||
|
||||
runs(function() {
|
||||
headless.sendCommand(command);
|
||||
return headless.sendCommand(command).then(function() {
|
||||
expect(compareAnswer(headless, expectedJSON)).toBeTruthy();
|
||||
});
|
||||
waitsFor(function() {
|
||||
var diff = (Date.now() - start);
|
||||
if (diff > TIME - 40 && !haveReported) {
|
||||
haveReported = true;
|
||||
var expected = loadTree(expectedJSON);
|
||||
console.log('not going to match', command);
|
||||
console.log('expected\n>>>>>>>>\n', expected);
|
||||
console.log('\n<<<<<<<<<<<\nactual', getHeadlessSummary(headless));
|
||||
console.log('\n<<<<ORIGIN>>>>>\n');
|
||||
if (expected.originTree) {
|
||||
console.log('expected origin tree:');
|
||||
console.log(expected.originTree);
|
||||
console.log('\n=========\n');
|
||||
console.log('actual origin tree');
|
||||
console.log(getHeadlessSummary(headless).originTree);
|
||||
}
|
||||
console.log(expectedJSON);
|
||||
console.log(JSON.stringify(getHeadlessSummary(headless)));
|
||||
}
|
||||
return compareAnswer(headless, expectedJSON);
|
||||
}, 'trees should be equal', 500);
|
||||
};
|
||||
|
||||
var expectLevelSolved = function(levelBlob) {
|
||||
|
@ -102,20 +62,12 @@ var runCommand = function(command, resultHandler) {
|
|||
var deferred = Q.defer();
|
||||
var msg = null;
|
||||
|
||||
deferred.promise.then(function(commands) {
|
||||
return headless.sendCommand(command, deferred).then(function() {
|
||||
return deferred.promise.then(function(commands) {
|
||||
msg = commands[commands.length - 1].get('error').get('msg');
|
||||
});
|
||||
|
||||
runs(function() {
|
||||
headless.sendCommand(command, deferred);
|
||||
});
|
||||
waitsFor(function() {
|
||||
if(null == msg) {
|
||||
return false;
|
||||
}
|
||||
resultHandler(msg);
|
||||
return true;
|
||||
}, 'commands should be finished', 500);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var TIME = 150;
|
||||
|
@ -131,4 +83,3 @@ module.exports = {
|
|||
ONE_COMMIT_TREE: ONE_COMMIT_TREE,
|
||||
runCommand: runCommand
|
||||
};
|
||||
|
||||
|
|
|
@ -4,287 +4,287 @@ var runCommand = base.runCommand;
|
|||
|
||||
describe('Git', function() {
|
||||
it('Commits', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit',
|
||||
base.ONE_COMMIT_TREE
|
||||
);
|
||||
});
|
||||
|
||||
it('handles commit options', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; git commit --amend;',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22master%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%22C2%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('throws with bad arg options', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit foo; git commit -am -m; git commit -am -a; git commit -am "hi" "ho"; git commit',
|
||||
base.ONE_COMMIT_TREE
|
||||
);
|
||||
});
|
||||
|
||||
it('handles lower case branch options', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch banana c0; git commit; git checkout -b side banana; git branch -d banana;git branch -f another c1; git commit',
|
||||
'{"branches":{"master":{"target":"C2","id":"master"},"side":{"target":"C3","id":"side"},"another":{"target":"C1","id":"another"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C0"],"id":"C3"}},"HEAD":{"target":"side","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('handles branch options', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch banana C0; git commit; git checkout -b side banana; git branch -d banana;git branch -f another C1; git commit',
|
||||
'{"branches":{"master":{"target":"C2","id":"master"},"side":{"target":"C3","id":"side"},"another":{"target":"C1","id":"another"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C0"],"id":"C3"}},"HEAD":{"target":"side","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does add', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git add; git commit',
|
||||
base.ONE_COMMIT_TREE
|
||||
);
|
||||
});
|
||||
|
||||
it('resets with all options', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit;git reset --soft HEAD~1;git reset --hard HEAD~1;gc;go C1;git reset --hard C3;',
|
||||
'{"branches":{"master":{"target":"C3","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"HEAD":{"target":"C1","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Checkouts', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b side',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C1","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Rebases', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'gc; git checkout -b side C1; gc; git rebase master',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22side%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22side%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('Interactive rebase', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'gc; git checkout -b side C1; gc; git rebase -i master --interactive-test',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22side%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22side%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('Interactive rebases with commit re-ordering', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'gc;gc;git rebase -i C0 --interactive-test C3,C1',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%27%22%2C%22id%22%3A%22master%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%22C0%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C1%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C1%27%22%7D%7D%2C%22tags%22%3A%7B%7D%2C%22HEAD%22%3A%7B%22id%22%3A%22HEAD%22%2C%22target%22%3A%22master%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('Switch branch and execute interactive rebase', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch test;git rebase -i C0 test --interactive-test',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22master%22%7D%2C%22test%22%3A%7B%22target%22%3A%22C1%27%22%2C%22id%22%3A%22test%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%22C1%27%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%27%22%7D%7D%2C%22tags%22%3A%7B%7D%2C%22HEAD%22%3A%7B%22id%22%3A%22HEAD%22%2C%22target%22%3A%22test%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('Reverts', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git revert HEAD',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%27%22%2C%22id%22%3A%22master%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%22C1%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C1%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('Merges', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'gc; git checkout -b side C1; gc; git merge master',
|
||||
'{"branches":{"master":{"target":"C2","id":"master"},"side":{"target":"C4","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"side","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Resets', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; git reset HEAD~1',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Branches', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch side C0',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Branches lowercase', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch side c0',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Deletes branches', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch side; git branch -d side',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Amends commits', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit --amend',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%27%22%2C%22id%22%3A%22master%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%22C1%27%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('Cherry picks', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b side C0; gc; git cherry-pick C11; git cherry-pick C1',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C1%27%22%2C%22id%22%3A%22side%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%22C0%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C1%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C1%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22side%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('Range operator is not supported', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b side C0; git cherry-pick C1..C0',
|
||||
'{"branches":{"master":{"target": "C1","id": "master"},"side":{"target":"C0","id": "side"}},"commits":{"C0":{"parents":[],"id": "C0","rootCommit": true},"C1":{"parents":["C0"],"id": "C1"}},"HEAD":{"id": "HEAD","target":"side"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Forces branches', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b side; git branch -f side C0',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('Rebases only new commits to destination', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b side C0; gc; gc;git cherry-pick C1;git rebase master',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22side%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%22C0%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%22C1%27%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C1%27%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%27%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%27%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22side%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('checks out after a rebase', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; git checkout -b bugFix C1; git commit; git rebase master;git checkout master',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22master%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22bugFix%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('checks out after an interactive rebase', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; git checkout -b bugFix C1; git commit; git rebase -i master --interactive-test;git checkout master',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22master%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22bugFix%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('solves merging level', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b bugFix;git commit;git checkout master;git commit;git merge bugFix',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C4%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3Anull%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22bugFix%22%2C%22remoteTrackingBranchID%22%3Anull%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C2%22%2C%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%7D%2C%22tags%22%3A%7B%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('solves rebase level', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b bugFix;git commit;git checkout master;git commit;git checkout bugFix;git rebase master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3Anull%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22bugFix%22%2C%22remoteTrackingBranchID%22%3Anull%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22tags%22%3A%7B%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22bugFix%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('solves rebase level with interactive rebase', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b bugFix;git commit;git checkout master;git commit;git checkout bugFix;git rebase -i master --interactive-test',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3Anull%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22bugFix%22%2C%22remoteTrackingBranchID%22%3Anull%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22tags%22%3A%7B%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22bugFix%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('does a whole bunch of crazy merging', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'gc;go -b side C1;gc;git merge master;go -b bug master;gc;go -b wut C3;git rebase bug;go side;git rebase wut;gc;git rebase wut;git merge C4;go master;git rebase side;go C6;git merge C3\';gb -f wut C8;go bug;git rebase wut',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C7%22%2C%22id%22%3A%22master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C7%22%2C%22id%22%3A%22side%22%7D%2C%22bug%22%3A%7B%22target%22%3A%22C8%22%2C%22id%22%3A%22bug%22%7D%2C%22wut%22%3A%7B%22target%22%3A%22C8%22%2C%22id%22%3A%22wut%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C2%22%2C%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C5%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C6%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C6%22%7D%2C%22C6%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C6%27%22%7D%2C%22C7%22%3A%7B%22parents%22%3A%5B%22C4%22%2C%22C6%27%22%5D%2C%22id%22%3A%22C7%22%7D%2C%22C8%22%3A%7B%22parents%22%3A%5B%22C3%27%22%2C%22C6%22%5D%2C%22id%22%3A%22C8%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22bug%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('if no-ff is specified, will always make a merge commit', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; go -b side HEAD~1; git commit; git merge master; go master; git merge side --no-ff',
|
||||
'{"branches":{"master":{"target":"C5","id":"master","remoteTrackingBranchID":null},"side":{"target":"C4","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"},"C5":{"parents":["C2","C4"],"id":"C5"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('makes a tag', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git tag v1',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{"v1":{"target":"C1","id":"v1","type":"tag"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('makes a tag and removes a tag', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git tag v1; git tag -d v1',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('makes a tag on another ref', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git tag v1 C0',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{"v1":{"target":"C0","id":"v1","type":"tag"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('doesn\'t make a tag if ref doesn\'t resolve', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git tag v1 foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('makes tag with relative ref and etc', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git tag v1 HEAD~1',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{"v1":{"target":"C0","id":"v1","type":"tag"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('makes tag with 3 letters', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git tag foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{"foo":{"target":"C1","id":"foo","type":"tag"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does not make tag if ref does not resolve', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git tag foo banana',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('should respect second command for -B option', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; git checkout -B side C1',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null},"side":{"target":"C1","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"side","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('will throw error if bad commits given to interactive test', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'gc; git rebase HEAD~2 -i --interactive-test C2,C100; gc',
|
||||
'{"branches":{"master":{"target":"C3","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('can handle slashes and dashes in branch names but doesn\'t allow o/', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch foo/bar; git commit; git checkout foo/bar; gc; go master; git merge foo/bar; go foo/bar; git checkout -b bar-baz; git commit; git branch o/foo',
|
||||
'{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":null},"foo/bar":{"target":"C3","id":"foo/bar","remoteTrackingBranchID":null},"bar-baz":{"target":"C5","id":"bar-baz","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"},"C5":{"parents":["C3"],"id":"C5"}},"tags":{},"HEAD":{"target":"bar-baz","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('the regex allows for multiple dashes but not in a row', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch foo-bar-banana-baz; gc; git branch foo----bar//baz',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null},"foo-bar-b":{"target":"C1","id":"foo-bar-b","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
|
@ -293,7 +293,7 @@ describe('Git', function() {
|
|||
describe('RevList', function() {
|
||||
|
||||
it('requires at least 1 argument', function() {
|
||||
runCommand('git rev-list', function(commandMsg) {
|
||||
return runCommand('git rev-list', function(commandMsg) {
|
||||
expect(commandMsg).toContain('at least 1');
|
||||
});
|
||||
});
|
||||
|
@ -302,37 +302,37 @@ describe('Git', function() {
|
|||
var SETUP = 'git co -b left C0; gc; git merge master; git co -b right C0; gc; git merge master; git co -b all left; git merge right; ';
|
||||
|
||||
it('single included revision', function() {
|
||||
runCommand(SETUP + 'git rev-list all', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git rev-list all', function(commandMsg) {
|
||||
expect(commandMsg).toBe('C6\nC5\nC4\nC3\nC2\nC1\nC0\n');
|
||||
});
|
||||
});
|
||||
|
||||
it('single excluded revision', function() {
|
||||
runCommand(SETUP + 'git rev-list all ^right', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git rev-list all ^right', function(commandMsg) {
|
||||
expect(commandMsg).toBe('C6\nC3\nC2\n');
|
||||
});
|
||||
});
|
||||
|
||||
it('multiple included revisions', function() {
|
||||
runCommand(SETUP + 'git rev-list right left', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git rev-list right left', function(commandMsg) {
|
||||
expect(commandMsg).toBe('C5\nC4\nC3\nC2\nC1\nC0\n');
|
||||
});
|
||||
});
|
||||
|
||||
it('multiple excluded revisions', function() {
|
||||
runCommand(SETUP + 'git rev-list all ^right ^left', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git rev-list all ^right ^left', function(commandMsg) {
|
||||
expect(commandMsg).toBe('C6\n');
|
||||
});
|
||||
});
|
||||
|
||||
it('range between branches', function() {
|
||||
runCommand(SETUP + 'git rev-list left..right', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git rev-list left..right', function(commandMsg) {
|
||||
expect(commandMsg).toBe('C5\nC4\n');
|
||||
});
|
||||
});
|
||||
|
||||
it('range between commits', function() {
|
||||
runCommand(SETUP + 'git rev-list C3..C5', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git rev-list C3..C5', function(commandMsg) {
|
||||
expect(commandMsg).toBe('C5\nC4\n');
|
||||
});
|
||||
});
|
||||
|
@ -343,7 +343,7 @@ describe('Git', function() {
|
|||
var SETUP = 'git co -b left C0; gc; git merge master; git co -b right C0; gc; git merge master; git co -b all left; git merge right; ';
|
||||
|
||||
it('implied HEAD', function() {
|
||||
runCommand(SETUP + '; git co right; git log', function(commandMsg) {
|
||||
return runCommand(SETUP + '; git co right; git log', function(commandMsg) {
|
||||
expect(commandMsg).toContain('Commit: C0\n');
|
||||
expect(commandMsg).toContain('Commit: C1\n');
|
||||
expect(commandMsg).not.toContain('Commit: C2\n');
|
||||
|
@ -355,7 +355,7 @@ describe('Git', function() {
|
|||
});
|
||||
|
||||
it('single included revision', function() {
|
||||
runCommand(SETUP + 'git log right', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git log right', function(commandMsg) {
|
||||
expect(commandMsg).toContain('Commit: C0\n');
|
||||
expect(commandMsg).toContain('Commit: C1\n');
|
||||
expect(commandMsg).not.toContain('Commit: C2\n');
|
||||
|
@ -367,7 +367,7 @@ describe('Git', function() {
|
|||
});
|
||||
|
||||
it('single excluded revision', function() {
|
||||
runCommand(SETUP + 'git log all ^right', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git log all ^right', function(commandMsg) {
|
||||
expect(commandMsg).not.toContain('Commit: C0\n');
|
||||
expect(commandMsg).not.toContain('Commit: C1\n');
|
||||
expect(commandMsg).toContain('Commit: C2\n');
|
||||
|
@ -379,7 +379,7 @@ describe('Git', function() {
|
|||
});
|
||||
|
||||
it('multiple included revisions', function() {
|
||||
runCommand(SETUP + 'git log right left', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git log right left', function(commandMsg) {
|
||||
expect(commandMsg).toContain('Commit: C0\n');
|
||||
expect(commandMsg).toContain('Commit: C1\n');
|
||||
expect(commandMsg).toContain('Commit: C2\n');
|
||||
|
@ -391,7 +391,7 @@ describe('Git', function() {
|
|||
});
|
||||
|
||||
it('multiple excluded revisions', function() {
|
||||
runCommand(SETUP + 'git log all ^right ^left', function(commandMsg) {
|
||||
return runCommand(SETUP + 'git log all ^right ^left', function(commandMsg) {
|
||||
expect(commandMsg).not.toContain('Commit: C0\n');
|
||||
expect(commandMsg).not.toContain('Commit: C1\n');
|
||||
expect(commandMsg).not.toContain('Commit: C2\n');
|
||||
|
|
|
@ -7,10 +7,9 @@ describe('GitEngine Levels', function() {
|
|||
var levels = sequences[sequenceKey];
|
||||
Object.keys(levels).forEach(function(index) {
|
||||
var levelBlob = levels[index];
|
||||
console.log('testing level', levelBlob.name.en_US);
|
||||
// console.log('testing level', levelBlob.name.en_US);
|
||||
base.expectLevelSolved(levelBlob);
|
||||
}.bind(this));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ var expectTreeAsync = base.expectTreeAsync;
|
|||
describe('Mercurial', function() {
|
||||
var assert = function(msg, command, tree) {
|
||||
it(msg, function() {
|
||||
expectTreeAsync(command, tree);
|
||||
return expectTreeAsync(command, tree);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -63,4 +63,3 @@ describe('Mercurial', function() {
|
|||
);
|
||||
|
||||
});
|
||||
|
||||
|
|
|
@ -3,280 +3,280 @@ var expectTreeAsync = base.expectTreeAsync;
|
|||
|
||||
describe('Git Remotes', function() {
|
||||
it('clones', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does fake teamwork', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does fake teamwork and then fetches', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git fetch',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git fakeTeamwork; git pull',
|
||||
'{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C3","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C3","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C3":{"parents":["C1"],"id":"C3"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls with rebase', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git fakeTeamwork; git pull --rebase',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3A%22o/master%22%2C%22localBranchesThatTrackThis%22%3Anull%7D%2C%22o/master%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22o/master%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3A%5B%22master%22%5D%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%2C%22originTree%22%3A%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3Anull%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%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('pushes', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git push',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls and then pushes', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git fakeTeamwork; git pull; git push',
|
||||
'{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C4","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C3":{"parents":["C1"],"id":"C3"},"C2":{"parents":["C1"],"id":"C2"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls with rebase and then pushes', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git fakeTeamwork; git pull --rebase; git push',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3A%22o/master%22%2C%22localBranchesThatTrackThis%22%3Anull%7D%2C%22o/master%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22o/master%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3A%5B%22master%22%5D%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%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%2C%22originTree%22%3A%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3Anull%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%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('clones with many branches', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch bugFix; git clone',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"bugFix":{"target":"C1","id":"bugFix","remoteTrackingBranchID":"o/bugFix"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/bugFix":{"target":"C1","id":"o/bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"bugFix":{"target":"C1","id":"bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('clones with a merge commit, does teamwork, fetches', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch bugFix; git commit; git checkout bugFix; git commit; git merge master; git clone; git fakeTeamwork bugFix 2',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"bugFix":{"target":"C4","id":"bugFix","remoteTrackingBranchID":"o/bugFix"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null},"o/bugFix":{"target":"C4","id":"o/bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"bugFix","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null},"bugFix":{"target":"C6","id":"bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"},"C5":{"parents":["C4"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"}},"HEAD":{"target":"bugFix","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('only fetches one branch if specified', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch bugFix; git clone; git fakeTeamwork bugFix; git fakeTeamwork; git fetch origin bugFix',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"bugFix":{"target":"C1","id":"bugFix","remoteTrackingBranchID":"o/bugFix"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/bugFix":{"target":"C2","id":"o/bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C3","id":"master","remoteTrackingBranchID":null},"bugFix":{"target":"C2","id":"bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('checks all branches for fetching', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch bugFix; git clone; git fakeTeamwork; git fetch',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"bugFix":{"target":"C1","id":"bugFix","remoteTrackingBranchID":"o/bugFix"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null},"o/bugFix":{"target":"C1","id":"o/bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null},"bugFix":{"target":"C1","id":"bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls with nothing and then commits', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git pull; git commit',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls from different remote tracking branches nad merges', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch side; git clone; git fakeTeamwork side;git commit; git pull origin side;git pull;git fakeTeamwork master;git pull',
|
||||
'{"branches":{"master":{"target":"C6","id":"master","remoteTrackingBranchID":"o/master"},"side":{"target":"C1","id":"side","remoteTrackingBranchID":"o/side"},"o/master":{"target":"C5","id":"o/master","remoteTrackingBranchID":null},"o/side":{"target":"C2","id":"o/side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C3":{"parents":["C1"],"id":"C3"},"C2":{"parents":["C1"],"id":"C2"},"C4":{"parents":["C2","C3"],"id":"C4"},"C5":{"parents":["C1"],"id":"C5"},"C6":{"parents":["C4","C5"],"id":"C6"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C5","id":"master","remoteTrackingBranchID":null},"side":{"target":"C2","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C5":{"parents":["C1"],"id":"C5"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls with rebase from different remote tracking', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch side; git clone; git fakeTeamwork side;git commit; git pull origin side --rebase',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3A%22o/master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22side%22%2C%22remoteTrackingBranchID%22%3A%22o/side%22%7D%2C%22o/master%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22o/master%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3A%5B%22master%22%5D%7D%2C%22o/side%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22o/side%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3A%5B%22side%22%5D%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%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%2C%22originTree%22%3A%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3Anull%7D%2C%22side%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22side%22%2C%22remoteTrackingBranchID%22%3Anull%2C%22localBranchesThatTrackThis%22%3Anull%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%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22side%22%2C%22id%22%3A%22HEAD%22%7D%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('pushes to another remote', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch side; git clone;git commit; git push origin HEAD:side',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"side":{"target":"C1","id":"side","remoteTrackingBranchID":"o/side"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/side":{"target":"C2","id":"o/side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"side":{"target":"C2","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pushes to tracking remote', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch side; git clone;git commit;git push; go side; git commit; git push',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"side":{"target":"C3","id":"side","remoteTrackingBranchID":"o/side"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null},"o/side":{"target":"C3","id":"o/side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"HEAD":{"target":"side","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null},"side":{"target":"C3","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('sets tracking when checking out remote branch', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git checkout -b side o/master;git fakeTeamwork;git pull',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null,"localBranchesThatTrackThis":["master","side"]},"side":{"target":"C2","id":"side","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"side","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('also sets tracking when just branching', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; gb side o/master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null,"localBranchesThatTrackThis":["master","side"]},"side":{"target":"C1","id":"side","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('can push with colon refspec', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; gc; git checkout -b foo HEAD~1; git push origin master:master',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"foo","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('can delete branches with colon refspec', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch foo; git clone; git push origin :foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pushes new branch onto server', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git push origin master:foo',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C2","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C2","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does not push for HEAD', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git checkout C2; git push',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"C2","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does push for HEAD as a source though to a new branch', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git checkout C2; git push origin HEAD:foo',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C2","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"C2","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C2","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('but it cant delete master on remote', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git branch foo; git clone; git push origin :master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":"o/foo"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('will prune the origin tree when deleting branches', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b foo; git commit; git clone; git push origin :foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"foo":{"target":"C2","id":"foo","remoteTrackingBranchID":null},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"foo","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('will not push to a remote if the local ref does not exist', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git push origin foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('will push to the remote branch IF IT has tracking', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git checkout -b foo o/master; git commit; git push',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null},"foo":{"target":"C2","id":"foo","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"foo","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('will push to a new remote branch if no tracking is set up', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git checkout -b foo; git commit; git push',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"foo":{"target":"C2","id":"foo","remoteTrackingBranchID":"o/foo"},"o/foo":{"target":"C2","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"foo","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C2","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('will push to the remote tracking branch WHILE NOT on branch if it is set up', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git checkout -b foo o/master; git commit; go master; git push origin foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null},"foo":{"target":"C2","id":"foo","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('will not fetch if ref does not exist on remote', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git fetch foo:master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does not fetch if ref does not exist on remote with one arg', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git fetch foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('validates branch names when fetching', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git fetch master:HEAD; git fetch master:f<>',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('fetches only one remote if specified', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone;gc;git push origin master:banana;git fakeTeamwork banana;git fakeTeamwork master;git fetch origin banana',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/banana":{"target":"C3","id":"o/banana","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":null},"banana":{"target":"C3","id":"banana","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C1"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('sets remote tracking', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git branch foo; git branch -u o/master foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('sets remote tracking on current branch if not specified', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git checkout -b foo; git branch -u o/master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"foo","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('fetches with no args, explicit dest args, and with just one arg', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git fetch origin master:o/master;git fakeTeamwork;git fetch;git fakeTeamwork;git fetch origin master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C4","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('doesn\'t fetch if out of sync, but will update explicit dest if specified', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; go HEAD~1; git fetch origin master:master;go master; gc; go HEAD~1; git fakeTeamwork;git fetch origin master:master',
|
||||
'{"branches":{"master":{"target":"C3","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"C2","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C4":{"parents":["C2"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls to the right branch and destination', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git checkout -b side o/master;git fakeTeamwork;git pull origin master:o/master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null},"side":{"target":"C2","id":"side","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"side","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('correctly checks upstream when pushing to a remote where commits already exist but branch is not updated DAYAM dawg', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git push origin master^:master',
|
||||
'{"branches":{"master":{"target":"C9","id":"master","remoteTrackingBranchID":"o/master"},"foo":{"target":"C8","id":"foo","remoteTrackingBranchID":"o/foo"},"o/master":{"target":"C5","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C5","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C1"],"id":"C4"},"C5":{"parents":["C2","C4"],"id":"C5"},"C6":{"parents":["C4"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"},"C8":{"parents":["C5","C7"],"id":"C8"},"C9":{"parents":["C5"],"id":"C9"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C5","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C5","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C4":{"parents":["C1"],"id":"C4"},"C5":{"parents":["C2","C4"],"id":"C5"}},"HEAD":{"target":"master","id":"HEAD"}}}',
|
||||
'{"branches":{"master":{"target":"C9","id":"master","remoteTrackingBranchID":"o/master"},"foo":{"target":"C8","id":"foo","remoteTrackingBranchID":"o/foo"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C5","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C1"],"id":"C4"},"C5":{"parents":["C2","C4"],"id":"C5"},"C6":{"parents":["C4"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"},"C8":{"parents":["C5","C7"],"id":"C8"},"C9":{"parents":["C5"],"id":"C9"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C5","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C4":{"parents":["C1"],"id":"C4"},"C5":{"parents":["C2","C4"],"id":"C5"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
|
@ -284,98 +284,98 @@ describe('Git Remotes', function() {
|
|||
});
|
||||
|
||||
it('correctly resolves source during git fetch with params', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git push origin master:foo; git fakeTeamwork foo 2; git fetch origin foo^:blah',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null},"blah":{"target":"C2","id":"blah","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C3","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"foo","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('correctly makes a new branch during fetch despite nothing to download', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git push origin master:foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('correctly resolves existing commits and updates', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git push origin master:foo; git fakeTeamwork foo 2; git fetch origin foo^:blah;go C0; git fetch origin foo^:master',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null},"blah":{"target":"C2","id":"blah","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"C0","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C3","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"foo","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('doesn\'t let you fetch to master if you are checked out there', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git push origin master:foo; git fakeTeamwork foo 2; git fetch origin foo^:blah; git fetch foo:master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null},"blah":{"target":"C2","id":"blah","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C3","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"foo","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('doesn\'t let you delete branches that don\'t exist', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git push origin :foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls to a new branch and then merges in that branch', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git commit; git pull origin master:bar',
|
||||
'{"branches":{"master":{"target":"C4","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"bar":{"target":"C2","id":"bar","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C3":{"parents":["C1"],"id":"C3"},"C2":{"parents":["C1"],"id":"C2"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('makes a new branch from pull and doesn\'t bork', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git pull origin :bar',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"bar":{"target":"C1","id":"bar","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('makes the new branch on push in the right place', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git push origin master:foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('tracks remote with -u', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git branch foo; git branch -u o/master foo',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does not fetch if one arg is not branch ref', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork 2; git fetch origin master~1',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C3","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('creates the branch on the fly', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; go -b side; git push origin side',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null},"side":{"target":"C2","id":"side","remoteTrackingBranchID":"o/side"},"o/side":{"target":"C2","id":"o/side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"side","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null},"side":{"target":"C2","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does not create the o/master branch on remote', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git push origin o/master',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls with rebase correctly in weird situation with no rebase to do', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git checkout -b side; git commit; git checkout master; git commit; git commit; git merge side; git commit; git clone; git checkout -b main master^^^; git rebase side; git rebase main master; git push;git pull --rebase',
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C6%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3A%22o/master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22side%22%2C%22remoteTrackingBranchID%22%3A%22o/side%22%7D%2C%22o/master%22%3A%7B%22target%22%3A%22C6%22%2C%22id%22%3A%22o/master%22%2C%22remoteTrackingBranchID%22%3Anull%7D%2C%22o/side%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22o/side%22%2C%22remoteTrackingBranchID%22%3Anull%7D%2C%22main%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22main%22%2C%22remoteTrackingBranchID%22%3Anull%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%22C1%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%22C2%22%2C%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C6%22%3A%7B%22parents%22%3A%5B%22C5%22%5D%2C%22id%22%3A%22C6%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C4%27%22%7D%2C%22C6%27%22%3A%7B%22parents%22%3A%5B%22C4%27%22%5D%2C%22id%22%3A%22C6%27%22%7D%7D%2C%22tags%22%3A%7B%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%2C%22originTree%22%3A%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C6%22%2C%22id%22%3A%22master%22%2C%22remoteTrackingBranchID%22%3Anull%7D%2C%22side%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22side%22%2C%22remoteTrackingBranchID%22%3Anull%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%22C1%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%22C2%22%2C%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C6%22%3A%7B%22parents%22%3A%5B%22C5%22%5D%2C%22id%22%3A%22C6%22%7D%7D%2C%22tags%22%3A%7B%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('pulls with rebase in other weird situation with just fast forward', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git fakeTeamwork; git pull --rebase',
|
||||
'{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C2","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C2","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
|
@ -383,28 +383,28 @@ describe('Git Remotes', function() {
|
|||
|
||||
/* TODO -- enable this back when we have better async tree compare, it takes too long right now
|
||||
it('will correctly resolve the dependency order of commits when fetching or pushing', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git commit; git commit; git checkout -b test C2; git commit; git checkout master; git push; git checkout master; git merge test; git commit; git push; git checkout test; git commit; git commit; git checkout -b feat1 master; git commit; git merge test; git checkout master; git merge test; git checkout feat1; git commit; git checkout master; git merge feat1; git push',
|
||||
'{"branches":{"master":{"target":"C14","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C7","id":"o/master","remoteTrackingBranchID":null},"test":{"target":"C9","id":"test","remoteTrackingBranchID":null},"feat1":{"target":"C13","id":"feat1","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C2"],"id":"C5"},"C6":{"parents":["C4","C5"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"},"C8":{"parents":["C5"],"id":"C8"},"C9":{"parents":["C8"],"id":"C9"},"C10":{"parents":["C7"],"id":"C10"},"C11":{"parents":["C10","C9"],"id":"C11"},"C12":{"parents":["C7","C9"],"id":"C12"},"C13":{"parents":["C11"],"id":"C13"},"C14":{"parents":["C12","C13"],"id":"C14"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C7","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C2"],"id":"C5"},"C6":{"parents":["C4","C5"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});*/
|
||||
|
||||
it('uses git force to bypass upstream check', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone; git commit; git push; go C1; git branch -f master C1; go master; git commit; git commit; go C1; git checkout -b side; git commit; go master; git merge side; git push --force',
|
||||
'{"branches":{"master":{"target":"C6","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C6","id":"o/master","remoteTrackingBranchID":null},"side":{"target":"C5","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C1"],"id":"C5"},"C6":{"parents":["C4","C5"],"id":"C6"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C6","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C5":{"parents":["C1"],"id":"C5"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C6":{"parents":["C4","C5"],"id":"C6"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('uses --push to delete commits', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; git clone;git reset HEAD~1;git push --force',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('uses --push to delete commits and can push again after', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git commit; git clone;git reset HEAD~1;git push --force;git commit; git push ',
|
||||
'{"branches":{"master":{"target":"C3","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C3","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C3","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"tags":{},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
|
|
|
@ -3,7 +3,7 @@ var expectTreeAsync = base.expectTreeAsync;
|
|||
|
||||
describe('Git Remote simple', function() {
|
||||
it('clones', function() {
|
||||
expectTreeAsync(
|
||||
return expectTreeAsync(
|
||||
'git clone',
|
||||
'{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":"o/master"},"o/master":{"target":"C1","id":"o/master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"target":"C1","id":"master","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}}'
|
||||
);
|
||||
|
|
190
gulpfile.js
Normal file
190
gulpfile.js
Normal file
|
@ -0,0 +1,190 @@
|
|||
var { execSync } = require('child_process');
|
||||
var { writeFileSync, readdirSync, readFileSync } = require('fs');
|
||||
|
||||
var glob = require('glob');
|
||||
var _ = require('underscore');
|
||||
|
||||
var { src, dest, series, watch } = require('gulp');
|
||||
var log = require('fancy-log');
|
||||
var gHash = require('gulp-hash');
|
||||
var gClean = require('gulp-clean');
|
||||
var gTerser = require('gulp-terser');
|
||||
var gJasmine = require('gulp-jasmine');
|
||||
var gJshint = require('gulp-jshint');
|
||||
|
||||
var source = require('vinyl-source-stream');
|
||||
var buffer = require('vinyl-buffer');
|
||||
var browserify = require('browserify');
|
||||
var babelify = require('babelify');
|
||||
|
||||
_.templateSettings.interpolate = /\{\{(.+?)\}\}/g;
|
||||
_.templateSettings.escape = /\{\{\{(.*?)\}\}\}/g;
|
||||
_.templateSettings.evaluate = /\{\{-(.*?)\}\}/g;
|
||||
|
||||
var prodDependencies = [
|
||||
'<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.1.1/es5-shim.min.js"></script>',
|
||||
'<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>',
|
||||
'<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>'
|
||||
];
|
||||
|
||||
var devDependencies = [
|
||||
'<script src="lib/jquery-1.8.0.min.js"></script>',
|
||||
'<script src="lib/raphael-min.js"></script>',
|
||||
'<script src="lib/es5-shim.min.js"></script>'
|
||||
];
|
||||
|
||||
// precompile for speed
|
||||
var indexFile = readFileSync('src/template.index.html').toString();
|
||||
var indexTemplate = _.template(indexFile);
|
||||
|
||||
var compliments = [
|
||||
'Wow peter great work!',
|
||||
'Such a professional dev environment',
|
||||
'Can\'t stop the TRAIN',
|
||||
'git raging'
|
||||
];
|
||||
var compliment = (done) => {
|
||||
var index = Math.floor(Math.random() * compliments.length);
|
||||
|
||||
log(compliments[index]);
|
||||
done();
|
||||
};
|
||||
|
||||
const lintStrings = (done) => {
|
||||
execSync('node src/js/intl/checkStrings');
|
||||
done();
|
||||
};
|
||||
|
||||
|
||||
var destDir = './build/';
|
||||
|
||||
var buildIndex = function(config) {
|
||||
log('Building index...');
|
||||
|
||||
// first find the one in here that we want
|
||||
var buildFiles = readdirSync(destDir);
|
||||
|
||||
var jsRegex = /bundle-[\.\w]+\.js/;
|
||||
var jsFile = buildFiles.find(function(name) {
|
||||
return jsRegex.exec(name);
|
||||
});
|
||||
if (!jsFile) {
|
||||
throw new Error('no hashed min file found!');
|
||||
}
|
||||
log('Found hashed js file: ' + jsFile);
|
||||
|
||||
var styleRegex = /main-[\.\w]+\.css/;
|
||||
var styleFile = buildFiles.find(function(name) {
|
||||
return styleRegex.exec(name);
|
||||
});
|
||||
if (!styleFile) {
|
||||
throw new Error('no hashed css file found!');
|
||||
}
|
||||
log('Found hashed style file: ' + styleFile);
|
||||
|
||||
// output these filenames to our index template
|
||||
var outputIndex = indexTemplate({
|
||||
jsFile,
|
||||
styleFile,
|
||||
jsDependencies: config.isProd ?
|
||||
prodDependencies.join('\n') :
|
||||
devDependencies.join('\n')
|
||||
});
|
||||
writeFileSync('index.html', outputIndex);
|
||||
};
|
||||
|
||||
var buildIndexProd = function(done) {
|
||||
buildIndex({ isProd: true });
|
||||
done();
|
||||
};
|
||||
var buildIndexDev = function(done) {
|
||||
buildIndex({ isProd: false });
|
||||
done();
|
||||
};
|
||||
|
||||
var getBundle = function() {
|
||||
return browserify({
|
||||
entries: [...glob.sync('src/**/*.js'), ...glob.sync('src/**/*.jsx')],
|
||||
debug: true,
|
||||
})
|
||||
.transform(babelify, { presets: ['@babel/preset-react'] })
|
||||
.bundle()
|
||||
.pipe(source('bundle.js'))
|
||||
.pipe(buffer())
|
||||
.pipe(gHash());
|
||||
};
|
||||
|
||||
var clean = function () {
|
||||
return src(destDir, { read: false, allowEmpty: true })
|
||||
.pipe(gClean());
|
||||
};
|
||||
|
||||
var jshint = function() {
|
||||
return src([
|
||||
'gulpfile.js',
|
||||
'__tests__/',
|
||||
'src/'
|
||||
])
|
||||
.pipe(gJshint())
|
||||
.pipe(gJshint.reporter('default'));
|
||||
};
|
||||
|
||||
var ifyBuild = function() {
|
||||
return getBundle()
|
||||
.pipe(dest(destDir));
|
||||
};
|
||||
|
||||
var miniBuild = function() {
|
||||
return getBundle()
|
||||
.pipe(gTerser())
|
||||
.pipe(dest(destDir));
|
||||
};
|
||||
|
||||
var style = function() {
|
||||
return src('src/style/main.css')
|
||||
.pipe(gHash())
|
||||
.pipe(dest(destDir));
|
||||
};
|
||||
|
||||
var jasmine = function() {
|
||||
return src('__tests__/*.spec.js')
|
||||
.pipe(gJasmine({ config: {
|
||||
random: false,
|
||||
}
|
||||
}));
|
||||
};
|
||||
|
||||
var gitAdd = function(done) {
|
||||
execSync('git add build/');
|
||||
done();
|
||||
};
|
||||
|
||||
var fastBuild = series(clean, ifyBuild, style, buildIndexDev, jshint);
|
||||
|
||||
var build = series(
|
||||
clean,
|
||||
miniBuild, style, buildIndexProd,
|
||||
gitAdd, jasmine, jshint,
|
||||
lintStrings, compliment
|
||||
);
|
||||
|
||||
var lint = series(jshint, compliment);
|
||||
|
||||
var watching = function() {
|
||||
return watch([
|
||||
'gulpfile.js',
|
||||
'__tests__/git.spec.js',
|
||||
'src/js/**/*.js',
|
||||
'src/js/**/**/*.js',
|
||||
'src/levels/**/*.js'
|
||||
], series([fastBuild , jasmine, jshint, lintStrings]));
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
default: build,
|
||||
lint,
|
||||
fastBuild,
|
||||
watching,
|
||||
build,
|
||||
test: jasmine,
|
||||
};
|
33
package.json
33
package.json
|
@ -13,23 +13,24 @@
|
|||
"url": "https://github.com/pcottle/learnGitBranching"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.4.4",
|
||||
"@babel/core": "^7.4.8",
|
||||
"@babel/preset-react": "^7.0.0",
|
||||
"babelify": "^10.0.0",
|
||||
"browserify": "^13.0.0",
|
||||
"browserify": "^16.5.0",
|
||||
"contributor-faces": "^1.0.2",
|
||||
"grunt": "^1.0.4",
|
||||
"grunt-browserify": "^5.3.0",
|
||||
"grunt-contrib-clean": "^2.0.0",
|
||||
"grunt-contrib-jshint": "^2.1.0",
|
||||
"grunt-contrib-uglify-es": "^3.3.0",
|
||||
"grunt-env": "^0.4.4",
|
||||
"grunt-hash": "~0.5.0",
|
||||
"grunt-jasmine-node": "~0.1.0",
|
||||
"grunt-jsxhint": "^0.5.0",
|
||||
"grunt-shell-spawn": "~0.3.0",
|
||||
"jasmine-node": "~1.12.0",
|
||||
"prompt": "^1.0.0"
|
||||
"fancy-log": "^1.3.3",
|
||||
"glob": "^7.1.6",
|
||||
"gulp": "^4.0.2",
|
||||
"gulp-clean": "^0.4.0",
|
||||
"gulp-hash": "^4.2.2",
|
||||
"gulp-jasmine": "^4.0.0",
|
||||
"gulp-jshint": "^2.1.0",
|
||||
"gulp-terser": "^1.2.0",
|
||||
"gulp-uglify": "^3.0.2",
|
||||
"jshint": "^2.11.0",
|
||||
"prompt": "^1.0.0",
|
||||
"vinyl-buffer": "^1.0.1",
|
||||
"vinyl-source-stream": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"backbone": "^1.4.0",
|
||||
|
@ -39,8 +40,8 @@
|
|||
"markdown": "^0.5.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"q": "^1.5.1",
|
||||
"react": "^16.8.6",
|
||||
"react-dom": "^16.8.6",
|
||||
"react": "^16.13.0",
|
||||
"react-dom": "^16.13.0",
|
||||
"underscore": "~1.4.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,8 +138,8 @@ HeadlessGit.prototype.sendCommand = function(value, entireCommandPromise) {
|
|||
console.log('!!!!!!!!!!!!!!!!!!!!!!');
|
||||
});
|
||||
deferred.resolve();
|
||||
return chain;
|
||||
};
|
||||
|
||||
exports.HeadlessGit = HeadlessGit;
|
||||
exports.getTreeQuick = getTreeQuick;
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ body,
|
|||
-webkit-box-align: center;
|
||||
-moz-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
justify-content : center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.startAlign {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue