diff --git a/levels/rebase.rb b/levels/rebase.rb new file mode 100644 index 00000000..f1eb80bc --- /dev/null +++ b/levels/rebase.rb @@ -0,0 +1,16 @@ +difficulty 2 + +description "We are using a git rebase workflow and the feature branch is ready to go into master. Let's rebase the master branch into our feature branch." + +setup do + init_from_level +end + +solution do + return repo.commits('feature').last.id_abbrev != "ed0fdcf" && + repo.commits("feature").map(&:message) == ['add feature','add content','init commit'] +end + +hint do + puts "You want to research the `git rebase` command" +end diff --git a/levels/rebase/.githug/COMMIT_EDITMSG b/levels/rebase/.githug/COMMIT_EDITMSG new file mode 100644 index 00000000..1dfacb1f --- /dev/null +++ b/levels/rebase/.githug/COMMIT_EDITMSG @@ -0,0 +1 @@ +add content diff --git a/levels/rebase/.githug/HEAD b/levels/rebase/.githug/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/levels/rebase/.githug/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/levels/rebase/.githug/ORIG_HEAD b/levels/rebase/.githug/ORIG_HEAD new file mode 100644 index 00000000..4437587c --- /dev/null +++ b/levels/rebase/.githug/ORIG_HEAD @@ -0,0 +1 @@ +4419b972c0cd1b346ac90332aa7c5cc949589f78 diff --git a/levels/rebase/.githug/config b/levels/rebase/.githug/config new file mode 100644 index 00000000..6c9406b7 --- /dev/null +++ b/levels/rebase/.githug/config @@ -0,0 +1,7 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true + precomposeunicode = true diff --git a/levels/rebase/.githug/index b/levels/rebase/.githug/index new file mode 100644 index 00000000..88fea9e7 Binary files /dev/null and b/levels/rebase/.githug/index differ diff --git a/levels/rebase/.githug/logs/HEAD b/levels/rebase/.githug/logs/HEAD new file mode 100644 index 00000000..24857b28 --- /dev/null +++ b/levels/rebase/.githug/logs/HEAD @@ -0,0 +1,13 @@ +0000000000000000000000000000000000000000 a78bcab6232e9382a86436cdfcb2ed0391b1f0ac ipmsteven 1418373185 -0800 commit (initial): init commit +a78bcab6232e9382a86436cdfcb2ed0391b1f0ac a78bcab6232e9382a86436cdfcb2ed0391b1f0ac ipmsteven 1418373194 -0800 checkout: moving from master to feature +a78bcab6232e9382a86436cdfcb2ed0391b1f0ac ed0fdcf366b21b8984fb37ea34106978a2e5c5ba ipmsteven 1418373239 -0800 commit: add feature +ed0fdcf366b21b8984fb37ea34106978a2e5c5ba a78bcab6232e9382a86436cdfcb2ed0391b1f0ac ipmsteven 1418373246 -0800 checkout: moving from feature to master +a78bcab6232e9382a86436cdfcb2ed0391b1f0ac 98205e9faf10cf33d2ef7c0f66e402540c62613a ipmsteven 1418373270 -0800 commit: add content +98205e9faf10cf33d2ef7c0f66e402540c62613a ed0fdcf366b21b8984fb37ea34106978a2e5c5ba ipmsteven 1418373282 -0800 checkout: moving from master to feature +ed0fdcf366b21b8984fb37ea34106978a2e5c5ba 98205e9faf10cf33d2ef7c0f66e402540c62613a ipmsteven 1418373314 -0800 rebase: checkout master +98205e9faf10cf33d2ef7c0f66e402540c62613a 4419b972c0cd1b346ac90332aa7c5cc949589f78 ipmsteven 1418373314 -0800 rebase: add feature +4419b972c0cd1b346ac90332aa7c5cc949589f78 4419b972c0cd1b346ac90332aa7c5cc949589f78 ipmsteven 1418373314 -0800 rebase finished: returning to refs/heads/feature +4419b972c0cd1b346ac90332aa7c5cc949589f78 98205e9faf10cf33d2ef7c0f66e402540c62613a ipmsteven 1418373423 -0800 checkout: moving from feature to master +98205e9faf10cf33d2ef7c0f66e402540c62613a 4419b972c0cd1b346ac90332aa7c5cc949589f78 ipmsteven 1418373435 -0800 checkout: moving from master to feature +4419b972c0cd1b346ac90332aa7c5cc949589f78 ed0fdcf366b21b8984fb37ea34106978a2e5c5ba ipmsteven 1418373492 -0800 reset: moving to ed0fdcf +ed0fdcf366b21b8984fb37ea34106978a2e5c5ba 98205e9faf10cf33d2ef7c0f66e402540c62613a ipmsteven 1418373509 -0800 checkout: moving from feature to master diff --git a/levels/rebase/.githug/logs/refs/heads/feature b/levels/rebase/.githug/logs/refs/heads/feature new file mode 100644 index 00000000..4367f707 --- /dev/null +++ b/levels/rebase/.githug/logs/refs/heads/feature @@ -0,0 +1,4 @@ +0000000000000000000000000000000000000000 a78bcab6232e9382a86436cdfcb2ed0391b1f0ac ipmsteven 1418373194 -0800 branch: Created from HEAD +a78bcab6232e9382a86436cdfcb2ed0391b1f0ac ed0fdcf366b21b8984fb37ea34106978a2e5c5ba ipmsteven 1418373239 -0800 commit: add feature +ed0fdcf366b21b8984fb37ea34106978a2e5c5ba 4419b972c0cd1b346ac90332aa7c5cc949589f78 ipmsteven 1418373314 -0800 rebase finished: refs/heads/feature onto 98205e9faf10cf33d2ef7c0f66e402540c62613a +4419b972c0cd1b346ac90332aa7c5cc949589f78 ed0fdcf366b21b8984fb37ea34106978a2e5c5ba ipmsteven 1418373492 -0800 reset: moving to ed0fdcf diff --git a/levels/rebase/.githug/logs/refs/heads/master b/levels/rebase/.githug/logs/refs/heads/master new file mode 100644 index 00000000..ce91feef --- /dev/null +++ b/levels/rebase/.githug/logs/refs/heads/master @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 a78bcab6232e9382a86436cdfcb2ed0391b1f0ac ipmsteven 1418373185 -0800 commit (initial): init commit +a78bcab6232e9382a86436cdfcb2ed0391b1f0ac 98205e9faf10cf33d2ef7c0f66e402540c62613a ipmsteven 1418373270 -0800 commit: add content diff --git a/levels/rebase/.githug/objects/0c/d212c5b28da2e65ed4900712dd36c8adce48ad b/levels/rebase/.githug/objects/0c/d212c5b28da2e65ed4900712dd36c8adce48ad new file mode 100644 index 00000000..6c01b6eb Binary files /dev/null and b/levels/rebase/.githug/objects/0c/d212c5b28da2e65ed4900712dd36c8adce48ad differ diff --git a/levels/rebase/.githug/objects/44/19b972c0cd1b346ac90332aa7c5cc949589f78 b/levels/rebase/.githug/objects/44/19b972c0cd1b346ac90332aa7c5cc949589f78 new file mode 100644 index 00000000..6e48ba15 Binary files /dev/null and b/levels/rebase/.githug/objects/44/19b972c0cd1b346ac90332aa7c5cc949589f78 differ diff --git a/levels/rebase/.githug/objects/54/3b9bebdc6bd5c4b22136034a95dd097a57d3dd b/levels/rebase/.githug/objects/54/3b9bebdc6bd5c4b22136034a95dd097a57d3dd new file mode 100644 index 00000000..b57931d7 Binary files /dev/null and b/levels/rebase/.githug/objects/54/3b9bebdc6bd5c4b22136034a95dd097a57d3dd differ diff --git a/levels/rebase/.githug/objects/81/78c76d627cade75005b40711b92f4177bc6cfc b/levels/rebase/.githug/objects/81/78c76d627cade75005b40711b92f4177bc6cfc new file mode 100644 index 00000000..eadf733c Binary files /dev/null and b/levels/rebase/.githug/objects/81/78c76d627cade75005b40711b92f4177bc6cfc differ diff --git a/levels/rebase/.githug/objects/98/205e9faf10cf33d2ef7c0f66e402540c62613a b/levels/rebase/.githug/objects/98/205e9faf10cf33d2ef7c0f66e402540c62613a new file mode 100644 index 00000000..3f552927 --- /dev/null +++ b/levels/rebase/.githug/objects/98/205e9faf10cf33d2ef7c0f66e402540c62613a @@ -0,0 +1,2 @@ +xQ +!@^P2:c-Y[}=x4sΈ`1 LbvHcea +mE}R1Yf}]pVS FS1GNkdtT +i7`,;g{\\귢{ .+FG8K'픎'.6/#; \ No newline at end of file diff --git a/levels/rebase/.githug/objects/b7/7313d7be366609dd2e77aa96d7fd73f4e27853 b/levels/rebase/.githug/objects/b7/7313d7be366609dd2e77aa96d7fd73f4e27853 new file mode 100644 index 00000000..c8c845c4 Binary files /dev/null and b/levels/rebase/.githug/objects/b7/7313d7be366609dd2e77aa96d7fd73f4e27853 differ diff --git a/levels/rebase/.githug/objects/b9/2d5d55d379cfb90b750e6472fc983f32ad9a71 b/levels/rebase/.githug/objects/b9/2d5d55d379cfb90b750e6472fc983f32ad9a71 new file mode 100644 index 00000000..320c57f9 Binary files /dev/null and b/levels/rebase/.githug/objects/b9/2d5d55d379cfb90b750e6472fc983f32ad9a71 differ diff --git a/levels/rebase/.githug/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/levels/rebase/.githug/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 new file mode 100644 index 00000000..71122389 Binary files /dev/null and b/levels/rebase/.githug/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 differ diff --git a/levels/rebase/.githug/objects/ed/0fdcf366b21b8984fb37ea34106978a2e5c5ba b/levels/rebase/.githug/objects/ed/0fdcf366b21b8984fb37ea34106978a2e5c5ba new file mode 100644 index 00000000..c4abc1a4 Binary files /dev/null and b/levels/rebase/.githug/objects/ed/0fdcf366b21b8984fb37ea34106978a2e5c5ba differ diff --git a/levels/rebase/.githug/refs/heads/feature b/levels/rebase/.githug/refs/heads/feature new file mode 100644 index 00000000..769db485 --- /dev/null +++ b/levels/rebase/.githug/refs/heads/feature @@ -0,0 +1 @@ +ed0fdcf366b21b8984fb37ea34106978a2e5c5ba diff --git a/levels/rebase/.githug/refs/heads/master b/levels/rebase/.githug/refs/heads/master new file mode 100644 index 00000000..0ecab675 --- /dev/null +++ b/levels/rebase/.githug/refs/heads/master @@ -0,0 +1 @@ +98205e9faf10cf33d2ef7c0f66e402540c62613a diff --git a/levels/rebase/README b/levels/rebase/README new file mode 100644 index 00000000..8178c76d --- /dev/null +++ b/levels/rebase/README @@ -0,0 +1 @@ +readme diff --git a/lib/githug/level.rb b/lib/githug/level.rb index a6511f3f..45b98225 100644 --- a/lib/githug/level.rb +++ b/lib/githug/level.rb @@ -9,7 +9,7 @@ class Level "commit_in_future", "reset", "reset_soft", "checkout_file", "remote", "remote_url", "pull", "remote_add", "push", "diff", "blame", "branch", "checkout", "checkout_tag", "checkout_tag_over_branch", "branch_at", - "delete_branch", "push_branch", "merge", "fetch", "repack", "cherry-pick", + "delete_branch", "push_branch", "merge", "fetch", "rebase", "repack", "cherry-pick", "grep", "rename_commit", "squash", "merge_squash", "reorder", "bisect", "stage_lines", "find_old_branch", "revert", "restore", "conflict", "contribute"] diff --git a/spec/githug_spec.rb b/spec/githug_spec.rb index f1acd5d5..071e8665 100644 --- a/spec/githug_spec.rb +++ b/spec/githug_spec.rb @@ -68,7 +68,7 @@ def skip_level `echo "*.swp" >> .gitignore` `githug`.should be_solved end - + it "solves the include level" do `echo "*.a\n!lib.a" >> .gitignore` `githug`.should be_solved @@ -231,6 +231,12 @@ def skip_level `githug`.should be_solved end + it "solves the rebase level" do + `git checkout feature` + `git rebase master` + `githug`.should be_solved + end + it "solves the repack level" do `git repack -d` `githug`.should be_solved