git-topic 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +11 -4
- data/Gemfile.lock +37 -15
- data/History.rdoc +19 -0
- data/README.rdoc +80 -95
- data/VERSION.yml +1 -1
- data/lib/git_topic.rb +105 -34
- data/lib/git_topic/cli.rb +35 -16
- data/lib/git_topic/comment.rb +2 -2
- data/lib/{core_ext.rb → git_topic/core_ext.rb} +70 -5
- data/lib/git_topic/git.rb +72 -35
- data/lib/git_topic/logger.rb +51 -0
- data/lib/git_topic/naming.rb +51 -8
- data/spec/comment_spec.rb +1 -0
- data/spec/git_topic_abandon_spec.rb +112 -0
- data/spec/git_topic_accept_spec.rb +8 -4
- data/spec/git_topic_comment_spec.rb +60 -7
- data/spec/git_topic_comments_spec.rb +1 -0
- data/spec/git_topic_done_spec.rb +8 -6
- data/spec/git_topic_install_aliases_spec.rb +1 -0
- data/spec/git_topic_logging_spec.rb +74 -0
- data/spec/git_topic_reject_spec.rb +5 -4
- data/spec/git_topic_review_spec.rb +51 -3
- data/spec/git_topic_setup_spec.rb +3 -2
- data/spec/git_topic_status_spec.rb +13 -2
- data/spec/git_topic_work_on_spec.rb +69 -9
- data/spec/spec_helper.rb +31 -12
- data/spec/template/origin/objects/16/f0fda5a88c44380ec3f687ec2e82fe702af7f7 +1 -0
- data/spec/template/origin/objects/17/5faa9939b9ac3d71ce53c42aee5e6e6a0c785c +0 -0
- data/spec/template/origin/objects/19/cf2c8a1f688b055774982d5010e6e30a664cc0 +0 -0
- data/spec/template/origin/objects/19/df194219c4296b82a9bfc8923def101c8485f1 +2 -0
- data/spec/template/origin/objects/28/222998cef35ffc5f39aa5c33c410624870e14e +0 -0
- data/spec/template/origin/objects/2b/56d40e3a8cdd99f6dbd02172231af5f44b1a4a +0 -0
- data/spec/template/origin/objects/3a/23df5be628d9dc86c3c201ed90666ca48706e8 +0 -0
- data/spec/template/origin/objects/47/a05bbad3ae0061aa6dcdefd5a2b91ef878e547 +0 -0
- data/spec/template/origin/objects/4a/f7e0cf66fa7ca6f4c64dabaf9cb4a7e75e530a +0 -0
- data/spec/template/origin/objects/51/30b0045082c311949fbe05bebbd7d77d2651fe +0 -0
- data/spec/template/origin/objects/53/348549b5f62b3d7fe308e314450c8dafb24a20 +1 -0
- data/spec/template/origin/objects/53/75f6d2da8e15dc1b93b53b794cc1c1a4b0a562 +2 -0
- data/spec/template/origin/objects/60/49ef3b01a46738c640dad45d5ea27d21ca3148 +2 -0
- data/spec/template/origin/objects/6a/671e28d05e12f0eb3a84b6c0e850acb5baa043 +0 -0
- data/spec/template/origin/objects/73/0d2b5fb7b28275d54672b24a10f9ff416151d9 +0 -0
- data/spec/template/origin/objects/77/8c48ec250d87693b1285518be6d32cd83c0d0e +0 -0
- data/spec/template/origin/objects/7b/2e0052793a417262e6b0a7049e27106e8df6df +0 -0
- data/spec/template/origin/objects/88/e563ba0dd5f822c9edcdb8a5d03f37c0b51efb +0 -0
- data/spec/template/origin/objects/8c/1eed9b8b7a0df74f6e0e4665f87f464b224e4f +1 -0
- data/spec/template/origin/objects/8e/59fbefc7a107f6c489a2ef65705f0b1944f7f0 +0 -0
- data/spec/template/origin/objects/ae/23634551b381284d41cc67060322d082f7cce4 +3 -0
- data/spec/template/origin/objects/b4/2dce0a04152ceb67d8120b5fc06cf583809590 +0 -0
- data/spec/template/origin/objects/c4/305717087f3413b5e50ae0c8037968758bf74d +0 -0
- data/spec/template/origin/objects/ca/9f1a38464dc0a7d099b7199126df2040f1b38b +0 -0
- data/spec/template/origin/objects/ce/66c4be9f1659f4621a0c709d9a87d2e6d464a2 +0 -0
- data/spec/template/origin/objects/d2/33cf6f04743aabaf4ea7ce546aed9a9758620f +1 -0
- data/spec/template/origin/objects/d3/f64a65197f61743cbe291f8c4dbaf09dbfb902 +2 -0
- data/spec/template/origin/objects/dd/1f38ef8037b85682079063d8c577c7b9f402bd +0 -0
- data/spec/template/origin/objects/df/8a312e41f9319aa4e73264d32ff65496867b37 +0 -0
- data/spec/template/origin/objects/e3/240e1f3328432e1708a2181d0b2e92bbb2b20d +1 -0
- data/spec/template/origin/objects/e8/4eaf06f50ed3b33e6846109436606668886c48 +0 -0
- data/spec/template/origin/objects/e8/b14aa4019584baf1ad3ab974503999fd170ce0 +0 -0
- data/spec/template/origin/objects/ed/ff0b85a5f8532df0bd6753d0942f4b7c0ede55 +0 -0
- data/spec/template/origin/refs/notes/reviews/USER/krakens +1 -0
- data/spec/template/origin/refs/notes/reviews/user24601/ninja-basic +1 -0
- metadata +87 -23
data/spec/git_topic_done_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
|
@@ -58,7 +59,7 @@ describe GitTopic do
|
|
58
59
|
f.puts %Q{
|
59
60
|
I have some general comments, mostly relating to the quality of our
|
60
61
|
zombie-control policies. Basically, they're not working.
|
61
|
-
}.
|
62
|
+
}.unindent
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -72,16 +73,16 @@ describe GitTopic do
|
|
72
73
|
# destroy z
|
73
74
|
# end
|
74
75
|
# This should take care of our issues with zombies.
|
75
|
-
}.
|
76
|
+
}.unindent
|
76
77
|
end
|
77
78
|
GitTopic.should_receive( :invoke_git_editor ).once
|
78
79
|
GitTopic.should_receive(
|
79
80
|
:git_author_name_short
|
80
81
|
).once.and_return( "Spec 123" )
|
81
82
|
|
82
|
-
File.
|
83
|
+
old_review = File.read(
|
83
84
|
"../origin/refs/notes/reviews/#{@user}/krakens"
|
84
|
-
)
|
85
|
+
)
|
85
86
|
|
86
87
|
lambda do
|
87
88
|
GitTopic.work_on 'krakens'
|
@@ -95,9 +96,10 @@ describe GitTopic do
|
|
95
96
|
GitTopic.done
|
96
97
|
end.should_not raise_error
|
97
98
|
|
98
|
-
File.
|
99
|
+
new_review = File.read(
|
99
100
|
"../origin/refs/notes/reviews/#{@user}/krakens"
|
100
|
-
)
|
101
|
+
)
|
102
|
+
new_review.should_not == old_review
|
101
103
|
end
|
102
104
|
|
103
105
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe GitTopic do
|
5
|
+
|
6
|
+
describe "logging" do
|
7
|
+
before :each do
|
8
|
+
use_repo 'in-progress'
|
9
|
+
@log_path = "#{@starting_dir}/tmp/home/.git_topic/log"
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
it "should log to $HOME/.git_topic/log" do
|
14
|
+
File.exists?( @log_path ).should be_false
|
15
|
+
with_argv( %w( work-on something origin/review/user24601/ninja-basic )) do
|
16
|
+
GitTopic.run
|
17
|
+
end
|
18
|
+
File.exists?( @log_path ).should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should log complete commands" do
|
22
|
+
with_argv( %w( work-on something origin/review/user24601/ninja-basic )) do
|
23
|
+
GitTopic.run
|
24
|
+
end
|
25
|
+
File.exists?( @log_path ).should be_true
|
26
|
+
log = File.read @log_path
|
27
|
+
|
28
|
+
log.should =~ %r{work-on something origin/review/user24601/ninja-basic}
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should log all git commands invoked" do
|
32
|
+
with_argv( %w( work-on something origin/review/user24601/ninja-basic )) do
|
33
|
+
GitTopic.run
|
34
|
+
end
|
35
|
+
File.exists?( @log_path ).should be_true
|
36
|
+
log = File.read @log_path
|
37
|
+
|
38
|
+
[
|
39
|
+
"git branch -r --no-color",
|
40
|
+
"git push origin HEAD:refs/heads/wip/#{@user}/something",
|
41
|
+
"git branch",
|
42
|
+
"git checkout -b wip/#{@user}/something origin/wip/#{@user}/something",
|
43
|
+
"git reset --hard origin/review/user24601/ninja-basic",
|
44
|
+
"git branch",
|
45
|
+
].each do |cmd|
|
46
|
+
log.should =~ %r{#{cmd}}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should log all errors from git" do
|
51
|
+
with_argv( %w( work-on something totally/invalid/upstream )) do
|
52
|
+
GitTopic.run
|
53
|
+
end
|
54
|
+
File.exists?( @log_path ).should be_true
|
55
|
+
log = File.read @log_path
|
56
|
+
|
57
|
+
[
|
58
|
+
"fatal: ambiguous argument 'totally/invalid/upstream': unknown revision",
|
59
|
+
].each do |cmd|
|
60
|
+
log.should =~ %r{#{cmd}}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should not log if --no-log is specified" do
|
65
|
+
File.exists?( @log_path ).should be_false
|
66
|
+
with_argv( %w( --no-log work-on something origin/review/user24601/ninja-basic )) do
|
67
|
+
GitTopic.run
|
68
|
+
end
|
69
|
+
File.exists?( @log_path ).should be_false
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
RejectFirstComment = %Q{
|
@@ -63,7 +64,7 @@ describe GitTopic do
|
|
63
64
|
f.puts %Q{
|
64
65
|
I have some general comments, mostly relating to the quality of our
|
65
66
|
zombie-control policies. Basically, they're not working.
|
66
|
-
}.
|
67
|
+
}.unindent
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
@@ -77,7 +78,7 @@ describe GitTopic do
|
|
77
78
|
# destroy z
|
78
79
|
# end
|
79
80
|
# This should take care of our issues with zombies.
|
80
|
-
}.
|
81
|
+
}.unindent
|
81
82
|
end
|
82
83
|
GitTopic.should_receive( :invoke_git_editor ).once
|
83
84
|
GitTopic.should_receive(
|
@@ -111,7 +112,7 @@ describe GitTopic do
|
|
111
112
|
f.puts %Q{
|
112
113
|
I have some general comments, mostly relating to the quality of our
|
113
114
|
zombie-control policies. Basically, they're not working.
|
114
|
-
}.
|
115
|
+
}.unindent
|
115
116
|
end
|
116
117
|
end
|
117
118
|
|
@@ -125,7 +126,7 @@ describe GitTopic do
|
|
125
126
|
# destroy z
|
126
127
|
# end
|
127
128
|
# This should take care of our issues with zombies.
|
128
|
-
}.
|
129
|
+
}.unindent
|
129
130
|
end
|
130
131
|
GitTopic.should_receive( :invoke_git_editor ).once
|
131
132
|
GitTopic.should_receive(
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
|
@@ -62,7 +63,7 @@ describe GitTopic do
|
|
62
63
|
system "git checkout master > /dev/null 2> /dev/null"
|
63
64
|
|
64
65
|
git_branch.should == "master"
|
65
|
-
|
66
|
+
λ do
|
66
67
|
GitTopic.review 'zombie-basic'
|
67
68
|
end.should_not raise_error
|
68
69
|
git_branch.should == "review/user24601/zombie-basic"
|
@@ -96,14 +97,61 @@ describe GitTopic do
|
|
96
97
|
|
97
98
|
it "should handle fully-qualified topic args" do
|
98
99
|
git_remote_branches.should include 'review/user24601/ninja-basic'
|
99
|
-
|
100
|
+
λ{ GitTopic.review( 'review/user24601/ninja-basic' )}.should_not raise_error
|
100
101
|
git_branch.should == 'review/user24601/ninja-basic'
|
101
102
|
git_branch_remote.should == 'origin'
|
102
103
|
git_branch_merge.should == 'refs/heads/review/user24601/ninja-basic'
|
103
104
|
end
|
104
105
|
|
105
106
|
it "should error if an illegal topic is specified" do
|
106
|
-
|
107
|
+
λ{ GitTopic.review( 'fakeuser/faketopic' )}.should raise_error
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "when the review branch is not rebased to master" do
|
111
|
+
it "should attempt to auto-rebase" do
|
112
|
+
git_head.should == '331d827fd47fb234af54e3a4bbf8c6705e9116cc'
|
113
|
+
system [
|
114
|
+
"git checkout --quiet master",
|
115
|
+
"echo 'content' > some_file",
|
116
|
+
"git add .",
|
117
|
+
"git commit --all -m 'force rebase' > /dev/null",
|
118
|
+
].join( "&& ")
|
119
|
+
|
120
|
+
head = git_head
|
121
|
+
head.should_not == '331d827fd47fb234af54e3a4bbf8c6705e9116cc'
|
122
|
+
|
123
|
+
GitTopic.review 'ninja-basic'
|
124
|
+
git_head( '^' ).should == head
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should inform the user when it has auto-rebased" do
|
128
|
+
system [
|
129
|
+
"git checkout --quiet master",
|
130
|
+
"echo 'content' > some_file",
|
131
|
+
"git add .",
|
132
|
+
"git commit --all -m 'force rebase' > /dev/null",
|
133
|
+
].join( "&& ")
|
134
|
+
GitTopic.review 'ninja-basic'
|
135
|
+
|
136
|
+
@output.should =~ /rebase/
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should issue a warning if auto-rebasing fails" do
|
140
|
+
git_head.should == '331d827fd47fb234af54e3a4bbf8c6705e9116cc'
|
141
|
+
system [
|
142
|
+
"git checkout --quiet master",
|
143
|
+
"echo 'conflicting content' > ninjas",
|
144
|
+
"git add .",
|
145
|
+
"git commit --all -m 'force failed rebase' > /dev/null",
|
146
|
+
].join( "&& ")
|
147
|
+
|
148
|
+
head = git_head
|
149
|
+
head.should_not == '331d827fd47fb234af54e3a4bbf8c6705e9116cc'
|
150
|
+
|
151
|
+
λ do
|
152
|
+
GitTopic.review 'ninja-basic'
|
153
|
+
end.should raise_error
|
154
|
+
end
|
107
155
|
end
|
108
156
|
end
|
109
157
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
|
@@ -81,7 +82,7 @@ describe GitTopic do
|
|
81
82
|
before( :each ) { use_repo 'in-progress' }
|
82
83
|
|
83
84
|
it "should ask the user to #setup or configure no-whine" do
|
84
|
-
with_argv
|
85
|
+
with_argv do
|
85
86
|
GitTopic.run
|
86
87
|
@err.should =~ /setup/
|
87
88
|
end
|
@@ -99,7 +100,7 @@ describe GitTopic do
|
|
99
100
|
|
100
101
|
system "git config --add remote.origin.fetch refs/notes/reviews/*:refs/notes/reviews/*"
|
101
102
|
|
102
|
-
with_argv
|
103
|
+
with_argv do
|
103
104
|
GitTopic.run
|
104
105
|
@err.should =~ /setup/
|
105
106
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
|
@@ -17,8 +18,18 @@ describe GitTopic do
|
|
17
18
|
@output.should_not be_nil
|
18
19
|
|
19
20
|
@output.should_not =~ /^#\s*pirates\s*$/m
|
20
|
-
@output.should =~
|
21
|
-
@output.should =~ /^#\s*
|
21
|
+
@output.should =~ /2 topics/m
|
22
|
+
@output.should =~ /^#\s*ninja-basic\s*/m
|
23
|
+
@output.should =~ /^#\s*zombie-basic\s*/m
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should show the age of others' unreviewed branches" do
|
27
|
+
|
28
|
+
jul_12 = Date.parse( "12 July 2010" )
|
29
|
+
Date.should_receive(:today).at_least(:once).and_return jul_12
|
30
|
+
GitTopic.status
|
31
|
+
|
32
|
+
@output.should =~ /5 days/
|
22
33
|
end
|
23
34
|
|
24
35
|
it "should not show others' rejected topics" do
|
@@ -40,7 +40,7 @@ describe GitTopic do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should fail if no topic is given" do
|
43
|
-
|
43
|
+
λ { GitTopic.work_on( nil )}.should raise_error
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should provide feedback to the user" do
|
@@ -68,14 +68,14 @@ describe GitTopic do
|
|
68
68
|
|
69
69
|
it "should switch to (rather than create) an existing topic branch" do
|
70
70
|
git_branches.should include( "wip/#{@user}/zombie-basic" )
|
71
|
-
|
71
|
+
λ{ GitTopic.work_on 'zombie-basic' }.should_not raise_error
|
72
72
|
|
73
73
|
git_branch.should == "wip/#{@user}/zombie-basic"
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should accept upstream as an argument" do
|
77
77
|
git_remote_branches.should include( "review/#{@user}/pirates" )
|
78
|
-
|
78
|
+
λ do
|
79
79
|
GitTopic.work_on 'pirates-etc',
|
80
80
|
:upstream => "origin/review/#{@user}/pirates"
|
81
81
|
end.should_not raise_error
|
@@ -84,6 +84,48 @@ describe GitTopic do
|
|
84
84
|
git_head.should == 'c0838ed2ee8f2e83c8bda859fc5e332b92f0a5a3'
|
85
85
|
end
|
86
86
|
|
87
|
+
describe "--continue flag" do
|
88
|
+
describe "when one has an as-yet unaccepted review branch" do
|
89
|
+
it "should set <upstream> to the latest such branch" do
|
90
|
+
λ do
|
91
|
+
GitTopic.work_on 'pirates-etc'
|
92
|
+
dirty_branch!
|
93
|
+
system "git add . && git commit -a -m 'arrrrr' > /dev/null 2> /dev/null"
|
94
|
+
GitTopic.done
|
95
|
+
end.should_not raise_error
|
96
|
+
|
97
|
+
head = git_remote "origin/review/#{@user}/pirates-etc"
|
98
|
+
head.should_not == '331d827fd47fb234af54e3a4bbf8c6705e9116cc'
|
99
|
+
|
100
|
+
GitTopic.work_on 'yet-more-pirates',
|
101
|
+
:continue => true
|
102
|
+
|
103
|
+
git_head.should == head
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "when one has no pending review branches" do
|
108
|
+
before( :each ){ use_repo 'fresh' }
|
109
|
+
|
110
|
+
it "should have no effect" do
|
111
|
+
GitTopic.work_on 'yet-more-pirates',
|
112
|
+
:continue => true
|
113
|
+
|
114
|
+
git_head.should == '331d827fd47fb234af54e3a4bbf8c6705e9116cc'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "when an explicit <upstream> is also supplied" do
|
119
|
+
it "should fail with an error" do
|
120
|
+
λ do
|
121
|
+
GitTopic.work_on 'pirates-etc',
|
122
|
+
:continue => true,
|
123
|
+
:upstream => "origin/review/#{@user}/pirates"
|
124
|
+
end.should raise_error
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
87
129
|
it "
|
88
130
|
should use (and then destroy) the rejected branch for the topic, if one
|
89
131
|
exists
|
@@ -95,6 +137,9 @@ describe GitTopic do
|
|
95
137
|
git_remote_branches.should_not include( "rejected/#{@user}/krakens" )
|
96
138
|
git_remote_branches.should include( "wip/#{@user}/krakens" )
|
97
139
|
git_head.should == '44ffd9c9c8b52b201659e3ad318cdad6ec836b46'
|
140
|
+
git_remote(
|
141
|
+
"wip/#{@user}/krakens"
|
142
|
+
).should == '44ffd9c9c8b52b201659e3ad318cdad6ec836b46'
|
98
143
|
end
|
99
144
|
|
100
145
|
it "
|
@@ -108,16 +153,31 @@ describe GitTopic do
|
|
108
153
|
end
|
109
154
|
|
110
155
|
it "
|
111
|
-
should
|
112
|
-
|
156
|
+
should not report the presence of comments, for comments that belong to
|
157
|
+
commits from an earlier topic branch of the same name
|
113
158
|
".oneline do
|
114
159
|
|
115
160
|
git_remote_branches.should include( "rejected/#{@user}/krakens" )
|
116
|
-
|
117
|
-
|
161
|
+
refspecs = "origin/rejected/#{@user}/krakens:master :rejected/#{@user}/krakens"
|
162
|
+
system "git push origin #{refspecs} > /dev/null 2> /dev/null"
|
118
163
|
git_remote_branches.should_not include( "rejected/#{@user}/krakens" )
|
119
|
-
|
120
|
-
|
164
|
+
|
165
|
+
GitTopic.work_on 'krakens'
|
166
|
+
git_head.should == '331d827fd47fb234af54e3a4bbf8c6705e9116cc'
|
167
|
+
@output.should_not =~ /comments/
|
168
|
+
end
|
169
|
+
|
170
|
+
it "
|
171
|
+
should use (and then destroy) the review branch for the topic, if one
|
172
|
+
exists
|
173
|
+
".oneline do
|
174
|
+
|
175
|
+
git_remote_branches.should include( "review/#{@user}/pirates" )
|
176
|
+
GitTopic.work_on 'pirates'
|
177
|
+
git_branch.should == "wip/#{@user}/pirates"
|
178
|
+
git_remote_branches.should_not include( "review/#{@user}/pirates" )
|
179
|
+
git_remote_branches.should include( "wip/#{@user}/pirates" )
|
180
|
+
git_head.should == 'c0838ed2ee8f2e83c8bda859fc5e332b92f0a5a3'
|
121
181
|
end
|
122
182
|
|
123
183
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -15,10 +15,10 @@ class << GitTopic
|
|
15
15
|
).each do |m|
|
16
16
|
|
17
17
|
define_method( "#{m}_with_nocache" ) do
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
send( "#{m}_without_nocache" ).tap do
|
19
|
+
GitTopic::Naming::ClassMethods.class_variable_set( "@@#{m}", nil )
|
20
|
+
GitTopic::Git::ClassMethods.class_variable_set( "@@#{m}", nil )
|
21
|
+
end
|
22
22
|
end
|
23
23
|
alias_method_chain m.to_sym, :nocache
|
24
24
|
end
|
@@ -32,7 +32,7 @@ class << GitTopic
|
|
32
32
|
end
|
33
33
|
alias_method_chain :git, :implicit_capture
|
34
34
|
|
35
|
-
def invoke_git_editor
|
35
|
+
def invoke_git_editor file
|
36
36
|
raise "
|
37
37
|
invoke_git_editor invoked with (#{file}). If you expect this method to be
|
38
38
|
called, mock or stub it.
|
@@ -41,6 +41,13 @@ class << GitTopic
|
|
41
41
|
|
42
42
|
end
|
43
43
|
|
44
|
+
class << GitTopic::Logger
|
45
|
+
def logger_with_nocache
|
46
|
+
logger_without_nocache.tap{ @logger = nil }
|
47
|
+
end
|
48
|
+
alias_method_chain :logger, :nocache
|
49
|
+
end
|
50
|
+
|
44
51
|
|
45
52
|
# Track original $stdout, $stderr write methods so we can “unmock” them for
|
46
53
|
# debugging
|
@@ -63,6 +70,7 @@ class Object
|
|
63
70
|
alias_method :write, :real_write
|
64
71
|
end
|
65
72
|
|
73
|
+
$debugging = true
|
66
74
|
require 'ruby-debug'
|
67
75
|
debugger
|
68
76
|
end
|
@@ -76,12 +84,14 @@ Rspec.configure do |c|
|
|
76
84
|
c.before( :all ) do
|
77
85
|
@starting_dir = Dir.pwd
|
78
86
|
@user = ENV['USER'] || `whoami`
|
87
|
+
ENV['HOME'] = "#{@starting_dir}/tmp/home"
|
79
88
|
end
|
80
89
|
|
81
90
|
c.before( :each ) do
|
82
91
|
# setup the directories
|
83
92
|
FileUtils.rm_rf './tmp'
|
84
93
|
FileUtils.mkdir './tmp'
|
94
|
+
FileUtils.mkdir './tmp/home'
|
85
95
|
|
86
96
|
# Copy our repos into tmp
|
87
97
|
%w(fresh in-progress).each do |d|
|
@@ -105,6 +115,10 @@ Rspec.configure do |c|
|
|
105
115
|
FileUtils.mv ".git/refs/notes/reviews/USER",
|
106
116
|
".git/refs/notes/reviews/#{@user}"
|
107
117
|
end
|
118
|
+
if File.exists? "./refs/notes/reviews/USER"
|
119
|
+
FileUtils.mv "./refs/notes/reviews/USER",
|
120
|
+
"./refs/notes/reviews/#{@user}"
|
121
|
+
end
|
108
122
|
Dir.chdir @starting_dir
|
109
123
|
end
|
110
124
|
Dir.chdir "#{@starting_dir}/tmp"
|
@@ -127,7 +141,7 @@ end
|
|
127
141
|
# helpers # {{{
|
128
142
|
|
129
143
|
def use_repo( repo )
|
130
|
-
Dir.chdir( repo )
|
144
|
+
Dir.chdir( "#{@starting_dir}/tmp/#{repo}" )
|
131
145
|
# Exit if e.g. GIT_DIR is set
|
132
146
|
raise "Spec error" unless git_dir == '.git'
|
133
147
|
end
|
@@ -144,15 +158,19 @@ def git_branch
|
|
144
158
|
current_branch[ 2..-1 ] unless current_branch.nil?
|
145
159
|
end
|
146
160
|
|
147
|
-
def git_head
|
148
|
-
`git rev-parse HEAD`.chomp
|
161
|
+
def git_head suffix=nil
|
162
|
+
`git rev-parse HEAD#{suffix}`.chomp
|
163
|
+
end
|
164
|
+
|
165
|
+
def git_remote branch
|
166
|
+
`git rev-parse #{branch}`.chomp
|
149
167
|
end
|
150
168
|
|
151
169
|
def git_origin_master
|
152
170
|
`git rev-parse origin/master`.chomp
|
153
171
|
end
|
154
172
|
|
155
|
-
def git_config
|
173
|
+
def git_config key
|
156
174
|
`git config #{key}`.chomp
|
157
175
|
end
|
158
176
|
|
@@ -178,7 +196,7 @@ def git_remote_branches
|
|
178
196
|
end
|
179
197
|
end
|
180
198
|
|
181
|
-
def git_notes_list
|
199
|
+
def git_notes_list ref
|
182
200
|
`git notes --ref #{ref}`.split( "\n" )
|
183
201
|
end
|
184
202
|
|
@@ -197,13 +215,14 @@ def dirty_branch!
|
|
197
215
|
end
|
198
216
|
|
199
217
|
|
200
|
-
def with_argv
|
218
|
+
def with_argv *val
|
201
219
|
restore = ARGV.dup
|
202
|
-
ARGV.replace( val )
|
220
|
+
ARGV.replace( val.flatten )
|
203
221
|
rv = yield
|
204
222
|
ARGV.replace( restore )
|
205
223
|
rv
|
206
224
|
end
|
207
225
|
|
226
|
+
|
208
227
|
# }}}
|
209
228
|
|