githug 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +8 -0
- data/README.md +15 -18
- data/levels/fetch.rb +2 -2
- data/levels/push.rb +1 -1
- data/levels/push_branch.rb +1 -1
- data/levels/rebase.rb +16 -0
- data/levels/rebase/.githug/COMMIT_EDITMSG +1 -0
- data/levels/rebase/.githug/HEAD +1 -0
- data/levels/rebase/.githug/ORIG_HEAD +1 -0
- data/levels/rebase/.githug/config +7 -0
- data/levels/rebase/.githug/index +0 -0
- data/levels/rebase/.githug/logs/HEAD +13 -0
- data/levels/rebase/.githug/logs/refs/heads/feature +4 -0
- data/levels/rebase/.githug/logs/refs/heads/master +2 -0
- data/levels/rebase/.githug/objects/0c/d212c5b28da2e65ed4900712dd36c8adce48ad +0 -0
- data/levels/rebase/.githug/objects/44/19b972c0cd1b346ac90332aa7c5cc949589f78 +0 -0
- data/levels/rebase/.githug/objects/54/3b9bebdc6bd5c4b22136034a95dd097a57d3dd +0 -0
- data/levels/rebase/.githug/objects/81/78c76d627cade75005b40711b92f4177bc6cfc +0 -0
- data/levels/rebase/.githug/objects/98/205e9faf10cf33d2ef7c0f66e402540c62613a +2 -0
- data/levels/rebase/.githug/objects/a7/8bcab6232e9382a86436cdfcb2ed0391b1f0ac +4 -0
- data/levels/rebase/.githug/objects/b7/7313d7be366609dd2e77aa96d7fd73f4e27853 +0 -0
- data/levels/rebase/.githug/objects/b9/2d5d55d379cfb90b750e6472fc983f32ad9a71 +0 -0
- data/levels/rebase/.githug/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- data/levels/rebase/.githug/objects/ed/0fdcf366b21b8984fb37ea34106978a2e5c5ba +0 -0
- data/levels/rebase/.githug/refs/heads/feature +1 -0
- data/levels/rebase/.githug/refs/heads/master +1 -0
- data/levels/rebase/README +1 -0
- data/levels/reorder.rb +1 -4
- data/levels/restructure.rb +1 -1
- data/lib/githug/cli.rb +30 -15
- data/lib/githug/level.rb +1 -1
- data/lib/githug/profile.rb +21 -12
- data/lib/githug/ui.rb +6 -12
- data/lib/githug/version.rb +1 -1
- data/spec/githug/cli_spec.rb +47 -46
- data/spec/githug/game_spec.rb +12 -12
- data/spec/githug/level_spec.rb +64 -93
- data/spec/githug/profile_spec.rb +34 -28
- data/spec/githug/repository_spec.rb +37 -38
- data/spec/githug/ui_spec.rb +51 -51
- data/spec/githug_spec.rb +60 -53
- data/spec/support/files/test_level.rb +16 -0
- metadata +26 -3
data/spec/githug/profile_spec.rb
CHANGED
@@ -2,33 +2,39 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Githug::Profile do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
describe ".load" do
|
6
|
+
it "loads the profile" do
|
7
|
+
settings = {:level => 1, :current_attempts => 0, :current_hint_index => 0, :current_levels => [], :completed_levels => []}
|
8
|
+
File.should_receive(:exists?).with(Githug::Profile::PROFILE_FILE).and_return(true)
|
9
|
+
File.should_receive(:open).with(Githug::Profile::PROFILE_FILE).and_return("settings")
|
10
|
+
YAML.should_receive(:load).with("settings").and_return(settings)
|
11
|
+
Githug::Profile.should_receive(:new).with(settings)
|
12
|
+
Githug::Profile.load
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
it "loads the defaults if the file does not exist" do
|
16
|
+
defaults = {:level => nil, :current_attempts => 0, :current_hint_index => 0, :current_levels => [], :completed_levels => []}
|
17
|
+
File.should_receive(:exists?).with(Githug::Profile::PROFILE_FILE).and_return(false)
|
18
|
+
Githug::Profile.should_receive(:new).with(defaults)
|
19
|
+
Githug::Profile.load
|
20
|
+
end
|
19
21
|
end
|
20
22
|
|
21
|
-
it "
|
23
|
+
it "allows method acces to getters and setters" do
|
22
24
|
profile = Githug::Profile.load
|
23
25
|
profile.level.should eql(nil)
|
24
26
|
profile.level = 1
|
25
27
|
profile.level.should eql(1)
|
26
28
|
end
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
describe ".save" do
|
31
|
+
|
32
|
+
it "saves the file" do
|
33
|
+
profile = Githug::Profile.load
|
34
|
+
File.should_receive(:open).with(Githug::Profile::PROFILE_FILE, "w")
|
35
|
+
profile.save
|
36
|
+
end
|
37
|
+
|
32
38
|
end
|
33
39
|
|
34
40
|
describe "level methods" do
|
@@ -46,30 +52,30 @@ describe Githug::Profile do
|
|
46
52
|
Githug::Level::LEVELS = @levels
|
47
53
|
end
|
48
54
|
|
49
|
-
describe "level_bump" do
|
55
|
+
describe "#level_bump" do
|
50
56
|
|
51
|
-
|
52
|
-
it "should bump the level" do
|
57
|
+
it "bumps the level" do
|
53
58
|
profile.should_receive(:set_level).with("add")
|
54
59
|
profile.level_bump
|
55
60
|
end
|
56
61
|
|
57
|
-
it "
|
62
|
+
it "resets the current_attempts" do
|
58
63
|
profile.current_attempts = 1
|
59
64
|
profile.level_bump
|
60
65
|
profile.current_attempts.should eql(0)
|
61
66
|
end
|
62
67
|
|
63
|
-
it "
|
64
|
-
profile.
|
65
|
-
profile.
|
66
|
-
profile.level_bump
|
68
|
+
it "sets the level to the first incomplete level" do
|
69
|
+
profile.level = "rm_cached"
|
70
|
+
profile.completed_levels = ["init", "add"]
|
71
|
+
profile.level_bump
|
72
|
+
profile.level.should eql("rm")
|
67
73
|
end
|
68
74
|
end
|
69
75
|
|
70
|
-
describe "set_level" do
|
76
|
+
describe "#set_level" do
|
71
77
|
|
72
|
-
it "
|
78
|
+
it "sets the level" do
|
73
79
|
profile.should_receive(:save)
|
74
80
|
profile.should_receive(:reset!)
|
75
81
|
profile.set_level("rm")
|
@@ -2,95 +2,94 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Githug::Repository do
|
4
4
|
|
5
|
+
let(:grit) { mock }
|
6
|
+
|
5
7
|
before(:each) do
|
6
|
-
|
7
|
-
|
8
|
-
@repository = Githug::Repository.new
|
9
|
-
@repository.stub(:create_gitignore)
|
8
|
+
Grit::Repo.stub(:new).and_return(grit)
|
9
|
+
subject.stub(:create_gitignore)
|
10
10
|
end
|
11
11
|
|
12
|
-
describe "initialize" do
|
12
|
+
describe "#initialize" do
|
13
13
|
|
14
|
-
it "
|
15
|
-
Grit::Repo.should_receive(:new).with(".").and_return(
|
14
|
+
it "calls grit on initialize" do
|
15
|
+
Grit::Repo.should_receive(:new).with(".").and_return(grit)
|
16
16
|
repo = Githug::Repository.new
|
17
|
-
repo.grit.should equal(
|
17
|
+
repo.grit.should equal(grit)
|
18
18
|
end
|
19
19
|
|
20
|
-
it "
|
20
|
+
it "contains a nil grit if the repo is invalid" do
|
21
21
|
Grit::Repo.should_receive(:new).and_raise(Grit::InvalidGitRepositoryError)
|
22
22
|
repo = Githug::Repository.new
|
23
23
|
repo.grit.should equal(nil)
|
24
24
|
end
|
25
25
|
|
26
|
-
it "
|
27
|
-
Grit::Repo.should_receive(:new).with("test").and_return(
|
26
|
+
it "initializes with a location" do
|
27
|
+
Grit::Repo.should_receive(:new).with("test").and_return(grit)
|
28
28
|
repo = Githug::Repository.new("test")
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
32
32
|
|
33
|
-
describe "reset" do
|
33
|
+
describe "#reset" do
|
34
34
|
|
35
35
|
before(:each) do
|
36
36
|
FileUtils.stub(:rm_rf)
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "does nothing if the current directory isn't git_hug" do
|
40
40
|
Dir.stub(:pwd).and_return("/tmp/foo")
|
41
41
|
FileUtils.should_not_receive(:rm_rf)
|
42
|
-
|
42
|
+
subject.reset
|
43
43
|
end
|
44
44
|
|
45
|
-
it "
|
45
|
+
it "removes all the files except .gitignore and .profile.yml" do
|
46
46
|
Dir.stub(:pwd).and_return("/tmp/git_hug")
|
47
47
|
Dir.stub(:entries).and_return([".profile.yml", ".gitignore", "..", ".", "README", ".git"])
|
48
48
|
FileUtils.should_receive(:rm_rf).with("README")
|
49
49
|
FileUtils.should_receive(:rm_rf).with(".git")
|
50
|
-
|
50
|
+
subject.reset
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
|
55
|
-
describe "create_gitignore" do
|
56
|
-
it "
|
57
|
-
|
55
|
+
describe "#create_gitignore" do
|
56
|
+
it "creates a gitignore" do
|
57
|
+
subject.unstub(:create_gitignore)
|
58
58
|
File.stub(:exists?).and_return(true)
|
59
59
|
Dir.should_receive(:chdir).with("git_hug")
|
60
60
|
File.should_receive(:open).with(".gitignore", "w")
|
61
|
-
|
61
|
+
subject.create_gitignore
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
describe "valid?" do
|
66
|
-
it "
|
67
|
-
|
65
|
+
describe "#valid?" do
|
66
|
+
it "is valid if grit exists" do
|
67
|
+
subject.should be_valid
|
68
68
|
end
|
69
69
|
|
70
|
-
it "
|
71
|
-
|
72
|
-
|
70
|
+
it "is not valid if grit does not exist" do
|
71
|
+
subject.instance_variable_set("@grit", nil)
|
72
|
+
subject.should_not be_valid
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
describe "init" do
|
77
|
-
it "
|
78
|
-
|
79
|
-
|
80
|
-
@repository.init
|
76
|
+
describe "#init" do
|
77
|
+
it "does not add and commit gitignore if prompted" do
|
78
|
+
Grit::Repo.should_receive(:init).with(".")
|
79
|
+
subject.init
|
81
80
|
end
|
82
81
|
end
|
83
82
|
|
84
|
-
describe "method_missing" do
|
85
|
-
it "
|
86
|
-
|
87
|
-
|
88
|
-
|
83
|
+
describe "#method_missing" do
|
84
|
+
it "deletegates to grit if the method exists" do
|
85
|
+
grit.should_receive(:respond_to?).with(:valid_method).and_return(true)
|
86
|
+
grit.should_receive(:valid_method)
|
87
|
+
subject.valid_method
|
89
88
|
end
|
90
89
|
|
91
90
|
it "should not deletegate to grit if the method does not exist" do
|
92
|
-
|
93
|
-
lambda {
|
91
|
+
grit.should_receive(:respond_to?).with(:invalid_method).and_return(false)
|
92
|
+
lambda { subject.invalid_method }.should raise_error(NoMethodError)
|
94
93
|
end
|
95
94
|
end
|
96
95
|
|
data/spec/githug/ui_spec.rb
CHANGED
@@ -4,73 +4,73 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe Githug::UI do
|
6
6
|
|
7
|
+
let(:ui_out) { StringIO.new }
|
8
|
+
let(:ui_in) { StringIO.new }
|
9
|
+
|
7
10
|
before(:each) do
|
8
|
-
|
9
|
-
|
10
|
-
@in = StringIO.new
|
11
|
-
@ui.out_stream = @out
|
12
|
-
@ui.in_stream = @in
|
11
|
+
subject.out_stream = ui_out
|
12
|
+
subject.in_stream = ui_in
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
16
|
-
|
17
|
-
|
15
|
+
it "puts to the stream" do
|
16
|
+
subject.puts("hello")
|
17
|
+
ui_out.string.should eql("hello\n")
|
18
18
|
end
|
19
19
|
|
20
|
-
it "
|
21
|
-
|
22
|
-
|
20
|
+
it "prints an empty line with no arguments" do
|
21
|
+
subject.puts
|
22
|
+
ui_out.string.should eql("\n")
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
26
|
-
|
27
|
-
|
25
|
+
it "prints without a new line" do
|
26
|
+
subject.print("hello")
|
27
|
+
ui_out.string.should eql("hello")
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
it "fetches gets from input stream" do
|
31
|
+
ui_in.puts "bar"
|
32
|
+
ui_in.rewind
|
33
|
+
subject.gets.should == "bar\n"
|
34
34
|
end
|
35
35
|
|
36
|
-
it "
|
36
|
+
it "makes a wordbox" do
|
37
37
|
word_box = <<-eof
|
38
38
|
********************************************************************************
|
39
39
|
* Githug *
|
40
40
|
********************************************************************************
|
41
41
|
eof
|
42
|
-
|
43
|
-
|
42
|
+
subject.word_box("Githug")
|
43
|
+
ui_out.string.should eql(word_box)
|
44
44
|
end
|
45
45
|
|
46
|
-
it "
|
47
|
-
|
48
|
-
printed =
|
46
|
+
it "prints a correct wordbox for uneven msg length" do
|
47
|
+
subject.word_box("odd",80)
|
48
|
+
printed = ui_out.string.lines
|
49
49
|
first_size = printed.first.chomp.length
|
50
50
|
|
51
51
|
printed.map{ |line| line.chomp.length.should eq(first_size) }
|
52
52
|
end
|
53
53
|
|
54
|
-
it "
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
it "requests text input" do
|
55
|
+
ui_in.puts "bar"
|
56
|
+
ui_in.rewind
|
57
|
+
subject.request("foo").should == "bar"
|
58
|
+
ui_out.string.should == "foo "
|
59
59
|
end
|
60
60
|
|
61
|
-
it "
|
62
|
-
|
63
|
-
|
61
|
+
it "asks for yes/no and return true when yes" do
|
62
|
+
subject.should_receive(:request).with('foo? [yn] ').and_return('y')
|
63
|
+
subject.ask("foo?").should be_true
|
64
64
|
end
|
65
65
|
|
66
|
-
it "
|
67
|
-
|
68
|
-
|
66
|
+
it "asks for yes/no and return false when no" do
|
67
|
+
subject.stub(:request).and_return('n')
|
68
|
+
subject.ask("foo?").should be_false
|
69
69
|
end
|
70
70
|
|
71
|
-
it "
|
72
|
-
|
73
|
-
|
71
|
+
it "asks for yes/no and return false for any input" do
|
72
|
+
subject.stub(:request).and_return('aklhasdf')
|
73
|
+
subject.ask("foo?").should be_false
|
74
74
|
end
|
75
75
|
|
76
76
|
describe "Non Windows Platform" do
|
@@ -78,32 +78,32 @@ describe Githug::UI do
|
|
78
78
|
ENV.stub(:[]).with("OS").and_return(nil)
|
79
79
|
end
|
80
80
|
|
81
|
-
it "
|
82
|
-
|
83
|
-
|
81
|
+
it "prints out a success message in green" do
|
82
|
+
subject.success("success")
|
83
|
+
ui_out.string.should eql("\033[32msuccess\033[0m\n")
|
84
84
|
end
|
85
85
|
|
86
|
-
it "
|
87
|
-
|
88
|
-
|
86
|
+
it "prints out a error message in red" do
|
87
|
+
subject.error("error")
|
88
|
+
ui_out.string.should eql("\033[31merror\033[0m\n")
|
89
89
|
end
|
90
90
|
|
91
91
|
end
|
92
92
|
|
93
|
-
describe "
|
93
|
+
describe "Windows Platform" do
|
94
94
|
|
95
95
|
before(:each) do
|
96
96
|
ENV.stub(:[]).with("OS").and_return("Windows_NT")
|
97
97
|
end
|
98
98
|
|
99
|
-
it "
|
100
|
-
|
101
|
-
|
99
|
+
it "prints out a success message in white" do
|
100
|
+
subject.success("success")
|
101
|
+
ui_out.string.should eql("success\n")
|
102
102
|
end
|
103
103
|
|
104
|
-
it "
|
105
|
-
|
106
|
-
|
104
|
+
it "prints out a error message in white" do
|
105
|
+
subject.error("error")
|
106
|
+
ui_out.string.should eql("error\n")
|
107
107
|
end
|
108
108
|
|
109
109
|
end
|
data/spec/githug_spec.rb
CHANGED
@@ -14,6 +14,7 @@ end
|
|
14
14
|
|
15
15
|
describe "The Game" do
|
16
16
|
|
17
|
+
|
17
18
|
before(:all) do
|
18
19
|
@dir = Dir.pwd
|
19
20
|
`rake build`
|
@@ -28,12 +29,12 @@ describe "The Game" do
|
|
28
29
|
Dir.chdir(@dir)
|
29
30
|
end
|
30
31
|
|
31
|
-
it "
|
32
|
+
it "solves the init level" do
|
32
33
|
`git init`
|
33
34
|
`githug`.should be_solved
|
34
35
|
end
|
35
36
|
|
36
|
-
it "
|
37
|
+
it "solves the config level" do
|
37
38
|
skip_level #The CI server does not have git config set
|
38
39
|
#full_name = `git config --get user.name`.chomp
|
39
40
|
#email = `git config --get user.email`.chomp
|
@@ -43,93 +44,93 @@ describe "The Game" do
|
|
43
44
|
#f.close
|
44
45
|
end
|
45
46
|
|
46
|
-
it "
|
47
|
+
it "solves the add level" do
|
47
48
|
`git add README`
|
48
49
|
`githug`.should be_solved
|
49
50
|
end
|
50
51
|
|
51
|
-
it "
|
52
|
+
it "solves the commit level" do
|
52
53
|
`git commit -m "test message"`
|
53
54
|
`githug`.should be_solved
|
54
55
|
end
|
55
56
|
|
56
|
-
it "
|
57
|
+
it "solves the clone level" do
|
57
58
|
`git clone https://github.com/Gazler/cloneme`
|
58
59
|
`githug`.should be_solved
|
59
60
|
end
|
60
61
|
|
61
|
-
it "
|
62
|
+
it "solves the clone_to_folder level" do
|
62
63
|
`git clone https://github.com/Gazler/cloneme my_cloned_repo`
|
63
64
|
`githug`.should be_solved
|
64
65
|
end
|
65
66
|
|
66
|
-
it "
|
67
|
+
it "solves the ignore level" do
|
67
68
|
`echo "*.swp" >> .gitignore`
|
68
69
|
`githug`.should be_solved
|
69
70
|
end
|
70
|
-
|
71
|
-
it "
|
71
|
+
|
72
|
+
it "solves the include level" do
|
72
73
|
`echo "*.a\n!lib.a" >> .gitignore`
|
73
74
|
`githug`.should be_solved
|
74
75
|
end
|
75
76
|
|
76
|
-
it "
|
77
|
+
it "solves the status level" do
|
77
78
|
`git ls-files --other --exclude-standard | githug`.should be_solved
|
78
79
|
end
|
79
80
|
|
80
|
-
it "
|
81
|
+
it "solves the number of files committed level" do
|
81
82
|
`git diff --name-only --cached | wc -l | githug`.should be_solved
|
82
83
|
end
|
83
84
|
|
84
|
-
it "
|
85
|
+
it "solves the rm level" do
|
85
86
|
file_name = `git status | grep deleted | cut -d " " -f 5`
|
86
87
|
`git rm #{file_name}`
|
87
88
|
`githug`.should be_solved
|
88
89
|
end
|
89
90
|
|
90
|
-
it "
|
91
|
+
it "solves the rm cached level" do
|
91
92
|
file_name = `git status | grep "new file" | cut -d " " -f 5`
|
92
93
|
`git rm --cached #{file_name}`
|
93
94
|
`githug`.should be_solved
|
94
95
|
end
|
95
96
|
|
96
|
-
it "
|
97
|
+
it "solves the stash level" do
|
97
98
|
`git stash save`
|
98
99
|
`githug`.should be_solved
|
99
100
|
end
|
100
101
|
|
101
|
-
it "
|
102
|
+
it "solves the rename level" do
|
102
103
|
`git mv oldfile.txt newfile.txt`
|
103
104
|
`githug`.should be_solved
|
104
105
|
end
|
105
106
|
|
106
|
-
it "
|
107
|
+
it "solves the restructure level" do
|
107
108
|
`mkdir src`
|
108
109
|
`git mv *.html src`
|
109
110
|
`githug`.should be_solved
|
110
111
|
end
|
111
112
|
|
112
|
-
it "
|
113
|
+
it "solves the log level" do
|
113
114
|
`git log --pretty=short | grep commit | cut -c 8-14 | githug`.should be_solved
|
114
115
|
end
|
115
116
|
|
116
|
-
it "
|
117
|
+
it "solves the tag level" do
|
117
118
|
`git tag new_tag`
|
118
119
|
`githug`.should be_solved
|
119
120
|
end
|
120
121
|
|
121
|
-
it "
|
122
|
+
it "solves the push_tags level" do
|
122
123
|
`git push origin master --tags`
|
123
124
|
`githug`.should be_solved
|
124
125
|
end
|
125
126
|
|
126
|
-
it "
|
127
|
+
it "solves the commit_amend level" do
|
127
128
|
`git add forgotten_file.rb`
|
128
129
|
`git commit --amend -C HEAD`
|
129
130
|
`githug`.should be_solved
|
130
131
|
end
|
131
132
|
|
132
|
-
it "
|
133
|
+
it "solves the commit_in_future level" do
|
133
134
|
authored_date = Time.now + 14
|
134
135
|
authored_date = authored_date.rfc2822
|
135
136
|
|
@@ -137,85 +138,85 @@ describe "The Game" do
|
|
137
138
|
`githug`.should be_solved
|
138
139
|
end
|
139
140
|
|
140
|
-
it "
|
141
|
+
it "solves the reset level" do
|
141
142
|
`git reset HEAD to_commit_second.rb`
|
142
143
|
`githug`.should be_solved
|
143
144
|
end
|
144
145
|
|
145
|
-
it "
|
146
|
+
it "solves the reset_soft level" do
|
146
147
|
`git reset --soft HEAD^`
|
147
148
|
`githug`.should be_solved
|
148
149
|
end
|
149
150
|
|
150
|
-
it "
|
151
|
+
it "solves the checkout_file level" do
|
151
152
|
`git checkout -- config.rb`
|
152
153
|
`githug`.should be_solved
|
153
154
|
end
|
154
155
|
|
155
|
-
it "
|
156
|
+
it "solves the remove level" do
|
156
157
|
`git remote | githug`.should be_solved
|
157
158
|
end
|
158
159
|
|
159
|
-
it "
|
160
|
+
it "solves the remote_url level" do
|
160
161
|
`git remote -v | tail -2 | head -1 | cut -c 17-52 | githug`.should be_solved
|
161
162
|
end
|
162
163
|
|
163
|
-
it "
|
164
|
+
it "solves the pull level" do
|
164
165
|
`git pull origin master`
|
165
166
|
`githug`.should be_solved
|
166
167
|
end
|
167
168
|
|
168
|
-
it "
|
169
|
+
it "solves the remote_add level" do
|
169
170
|
`git remote add origin https://github.com/githug/githug`
|
170
171
|
`githug`.should be_solved
|
171
172
|
end
|
172
173
|
|
173
|
-
it "
|
174
|
+
it "solves the push level" do
|
174
175
|
`git rebase origin/master`
|
175
176
|
`git push origin`
|
176
177
|
`githug`.should be_solved
|
177
178
|
end
|
178
179
|
|
179
|
-
it "
|
180
|
+
it "solves the diff level" do
|
180
181
|
`echo "26" | githug`.should be_solved
|
181
182
|
end
|
182
183
|
|
183
|
-
it "
|
184
|
+
it "solves the blame level" do
|
184
185
|
`echo "spider man" | githug`.should be_solved
|
185
186
|
end
|
186
187
|
|
187
|
-
it "
|
188
|
+
it "solves the branch level" do
|
188
189
|
`git branch test_code`
|
189
190
|
`githug`.should be_solved
|
190
191
|
end
|
191
192
|
|
192
|
-
it "
|
193
|
+
it "solves the checkout level" do
|
193
194
|
`git checkout -b my_branch`
|
194
195
|
`githug`.should be_solved
|
195
196
|
end
|
196
197
|
|
197
|
-
it "
|
198
|
+
it "solves the checkout_tag level" do
|
198
199
|
`git checkout v1.2`
|
199
200
|
`githug`.should be_solved
|
200
201
|
end
|
201
202
|
|
202
|
-
it "
|
203
|
+
it "solves the checkout_tag_over_branch level" do
|
203
204
|
`git checkout tags/v1.2`
|
204
205
|
`githug`.should be_solved
|
205
206
|
end
|
206
207
|
|
207
|
-
it "
|
208
|
+
it "solves the branch_at level" do
|
208
209
|
commit = `git log HEAD~1 --pretty=short | head -1 | cut -d " " -f 2`
|
209
210
|
`git branch test_branch #{commit}`
|
210
211
|
`githug`.should be_solved
|
211
212
|
end
|
212
213
|
|
213
|
-
it "
|
214
|
+
it "solves the delete_branch level" do
|
214
215
|
`git branch -d delete_me`
|
215
216
|
`githug`.should be_solved
|
216
217
|
end
|
217
218
|
|
218
|
-
it "
|
219
|
+
it "solves the push_branch level" do
|
219
220
|
`git push origin test_branch`
|
220
221
|
`githug`.should be_solved
|
221
222
|
end
|
@@ -225,73 +226,79 @@ describe "The Game" do
|
|
225
226
|
`githug`.should be_solved
|
226
227
|
end
|
227
228
|
|
228
|
-
it "
|
229
|
+
it "solves the fetch level" do
|
229
230
|
`git fetch`
|
230
231
|
`githug`.should be_solved
|
231
232
|
end
|
232
233
|
|
233
|
-
it "
|
234
|
+
it "solves the rebase level" do
|
235
|
+
`git checkout feature`
|
236
|
+
`git rebase master`
|
237
|
+
`githug`.should be_solved
|
238
|
+
end
|
239
|
+
|
240
|
+
it "solves the repack level" do
|
234
241
|
`git repack -d`
|
235
242
|
`githug`.should be_solved
|
236
243
|
end
|
237
244
|
|
238
|
-
it "
|
245
|
+
it "solves the cherry-pick level" do
|
239
246
|
commit = `git log new-feature --oneline -n 3 | tail -1 | cut -d " " -f 1`
|
240
247
|
`git cherry-pick #{commit}`
|
241
248
|
`githug`.should be_solved
|
242
249
|
end
|
243
250
|
|
244
|
-
it "
|
251
|
+
it "solves the grep level" do
|
245
252
|
`echo "4" | githug`.should be_solved
|
246
253
|
end
|
247
254
|
|
248
|
-
it "
|
255
|
+
it "solves the rename_commit level" do
|
249
256
|
skip_level
|
250
257
|
end
|
251
258
|
|
252
|
-
it "
|
259
|
+
it "solves the squash level" do
|
253
260
|
skip_level
|
254
261
|
end
|
255
262
|
|
256
|
-
it "
|
263
|
+
it "solves the merge squash level" do
|
257
264
|
`git merge --squash long-feature-branch`
|
258
265
|
`git commit -m "Merged Long Feature Branch"`
|
259
266
|
`githug`.should be_solved
|
260
267
|
end
|
261
268
|
|
262
|
-
it "
|
269
|
+
it "solves the reorder level" do
|
263
270
|
skip_level
|
264
271
|
end
|
265
272
|
|
266
|
-
it "
|
273
|
+
it "solves the bisect level" do
|
267
274
|
`echo "18ed2ac" | githug`.should be_solved
|
268
275
|
end
|
269
276
|
|
270
|
-
it "
|
277
|
+
it "solves the stage_lines level" do
|
271
278
|
skip_level
|
272
279
|
end
|
273
280
|
|
274
|
-
it "
|
281
|
+
it "solves the find_old_branch level" do
|
275
282
|
`git checkout solve_world_hunger`
|
276
283
|
`githug`.should be_solved
|
277
284
|
end
|
278
285
|
|
279
|
-
it "
|
286
|
+
it "solves the revert level" do
|
280
287
|
sleep 1
|
281
288
|
`git revert HEAD~1 --no-edit`
|
282
289
|
`githug`.should be_solved
|
283
290
|
end
|
284
291
|
|
285
|
-
it "
|
292
|
+
it "solves the restore level" do
|
286
293
|
`git reflog | grep "Restore this commit" | awk '{print $1}' | xargs git checkout`
|
287
294
|
`githug`.should be_solved
|
288
295
|
end
|
289
296
|
|
290
|
-
it "
|
297
|
+
it "solves the conflict level" do
|
291
298
|
skip_level
|
292
299
|
end
|
293
300
|
|
294
|
-
it "
|
301
|
+
it "solves the contribute level" do
|
295
302
|
skip_level
|
296
303
|
end
|
297
304
|
|