diff --git a/src/js/visuals/visualization.js b/src/js/visuals/visualization.js index dc69ca02..1a508991 100644 --- a/src/js/visuals/visualization.js +++ b/src/js/visuals/visualization.js @@ -151,7 +151,7 @@ var Visualization = Backbone.View.extend({ fadeTreeIn: function() { this.shown = true; - if (!this.paper.canvas) { + if (!this.paper) { return; } $(this.paper.canvas).animate({opacity: 1}, this.getAnimationTime()); diff --git a/src/levels/index.js b/src/levels/index.js index 727945f7..c4d34094 100644 --- a/src/levels/index.js +++ b/src/levels/index.js @@ -43,7 +43,8 @@ exports.levelSequences = { require('./remote/pushArgs').level, require('./remote/pushArgs2').level, require('./remote/fetchArgs').level, - require('./remote/sourceNothing').level + require('./remote/sourceNothing').level, + require('./remote/pullArgs').level ] }; diff --git a/src/levels/remote/pullArgs.js b/src/levels/remote/pullArgs.js index babe0b02..b3ed31e7 100644 --- a/src/levels/remote/pullArgs.js +++ b/src/levels/remote/pullArgs.js @@ -1,6 +1,7 @@ exports.level = { - "goalTreeString": "{\"branches\":{\"master\":{\"target\":\"C1\",\"id\":\"master\",\"remoteTrackingBranchID\":\"o/master\"},\"o/master\":{\"target\":\"C1\",\"id\":\"o/master\",\"remoteTrackingBranchID\":null},\"o/bar\":{\"target\":\"C1\",\"id\":\"o/bar\",\"remoteTrackingBranchID\":null}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"}},\"HEAD\":{\"target\":\"master\",\"id\":\"HEAD\"},\"originTree\":{\"branches\":{\"master\":{\"target\":\"C3\",\"id\":\"master\",\"remoteTrackingBranchID\":null},\"bar\":{\"target\":\"C3\",\"id\":\"bar\",\"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\"}}}", - "solutionCommand": "git clone;git fakeTeamwork 2", + "goalTreeString": "{\"branches\":{\"master\":{\"target\":\"C6\",\"id\":\"master\",\"remoteTrackingBranchID\":\"o/master\"},\"o/master\":{\"target\":\"C1\",\"id\":\"o/master\",\"remoteTrackingBranchID\":null},\"o/bar\":{\"target\":\"C1\",\"id\":\"o/bar\",\"remoteTrackingBranchID\":null},\"foo\":{\"target\":\"C3\",\"id\":\"foo\",\"remoteTrackingBranchID\":null},\"side\":{\"target\":\"C2\",\"id\":\"side\",\"remoteTrackingBranchID\":null}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"},\"C4\":{\"parents\":[\"C1\"],\"id\":\"C4\"},\"C3\":{\"parents\":[\"C1\"],\"id\":\"C3\"},\"C5\":{\"parents\":[\"C3\",\"C4\"],\"id\":\"C5\"},\"C2\":{\"parents\":[\"C1\"],\"id\":\"C2\"},\"C6\":{\"parents\":[\"C2\",\"C5\"],\"id\":\"C6\"}},\"HEAD\":{\"target\":\"master\",\"id\":\"HEAD\"},\"originTree\":{\"branches\":{\"master\":{\"target\":\"C2\",\"id\":\"master\",\"remoteTrackingBranchID\":null},\"bar\":{\"target\":\"C3\",\"id\":\"bar\",\"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\":\"bar\",\"id\":\"HEAD\"}}}", + "solutionCommand": "git pull origin bar:foo;git pull origin master:side", + "startTree": "{\"branches\":{\"master\":{\"target\":\"C4\",\"id\":\"master\",\"remoteTrackingBranchID\":\"o/master\"},\"o/master\":{\"target\":\"C1\",\"id\":\"o/master\",\"remoteTrackingBranchID\":null},\"o/bar\":{\"target\":\"C1\",\"id\":\"o/bar\",\"remoteTrackingBranchID\":null}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"},\"C4\":{\"parents\":[\"C1\"],\"id\":\"C4\"}},\"HEAD\":{\"target\":\"master\",\"id\":\"HEAD\"},\"originTree\":{\"branches\":{\"master\":{\"target\":\"C2\",\"id\":\"master\",\"remoteTrackingBranchID\":null},\"bar\":{\"target\":\"C3\",\"id\":\"bar\",\"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\":\"bar\",\"id\":\"HEAD\"}}}", "name": { "en_US": "Push arguments" }, @@ -18,9 +19,31 @@ exports.level = { "", "Now that you know pretty much *everything* there is to know about arguments for `git fetch` and `git push`, there's almost really nothing left to cover for git pull :)", "", - "That's because git pull at the end of the day is *really* just shorthand for a fetch followed by merging in whatever was just fetched.", + "That's because git pull at the end of the day is *really* just shorthand for a fetch followed by merging in whatever was just fetched. You can think of it as running git fetch with SAME arguments specified and then merging in *where* those commits ended up.", "", - "This applies when you use crazy-complicated arguments as well. Let's see some examples:" + "This applies even when you use crazy-complicated arguments as well. Let's see some examples:" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Here are some equivalent commands in git:", + "", + "`git pull origin foo` is equal to:", + "", + "`git fetch origin foo; git merge o/foo`", + "", + "And...", + "", + "`git pull origin bar~1:bugFix` is equal to:", + "", + "`git fetch origin bar~1:bugFix; git merge bugFix`", + "", + "See? git pull is really just shorthand for fetch + merge, and all git pull cares about is where the commits ended up (the `destination` argument that it figures out during fetch)", + "", + "Lets see a demo:" ] } }, @@ -28,7 +51,7 @@ exports.level = { "type": "GitDemonstrationView", "options": { "beforeMarkdowns": [ - "If we specify the place to fetch, everything happens as before but we merge in whatever was just fetched" + "If we specify the place to fetch, everything happens as before with fetch but we merge in whatever was just fetched" ], "afterMarkdowns": [ "See! by specifying `master` we downloaded commits onto `o/master` just as normal. Then we merged `o/master` to where we are, *regardless* of what was currently checked out."