git-process 0.9.7 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +20 -0
- data/README.md +23 -10
- data/bin/git-to-master +13 -3
- data/lib/git-process/changed_file_helper.rb +5 -2
- data/lib/git-process/rebase_to_master.rb +11 -2
- data/lib/git-process/version.rb +3 -3
- data/spec/changed_file_helper_spec.rb +5 -2
- data/spec/rebase_to_master_spec.rb +15 -0
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# CHANGELOG - 1.0.1 #
|
2
|
+
|
3
|
+
### Since 0.9.7 ###
|
4
|
+
|
5
|
+
* Adds --keep option to git-to-master
|
6
|
+
* Fixes problem trying to add/remove an empty list of files
|
7
|
+
* Documentation updates
|
8
|
+
|
9
|
+
### Since 0.9.6 ###
|
10
|
+
|
11
|
+
* Cleans up Gem dependencies
|
12
|
+
|
13
|
+
### Since 0.9.5 ###
|
14
|
+
|
15
|
+
* Cleans up some error messages
|
16
|
+
* Improved documentation
|
17
|
+
* Adds support for spaces and renames in Status
|
18
|
+
* No longer complains if it can't find _parking_
|
19
|
+
* Prompts to remove the local version of the integration branch
|
20
|
+
* Adds help for handling changed files
|
data/README.md
CHANGED
@@ -11,6 +11,8 @@ See the F.A.Q. for a much more complete explanation for the thoughts and assumpt
|
|
11
11
|
|
12
12
|
$ sudo gem install git-process
|
13
13
|
|
14
|
+
Some older operating systems (such as OSX 10.6) are using an old version of RubyGems, which can cause installation problems. Do "`sudo gem update --system`" to fix.
|
15
|
+
|
14
16
|
|
15
17
|
# Overview #
|
16
18
|
|
@@ -82,14 +84,24 @@ $ git to-master # 6
|
|
82
84
|
```
|
83
85
|
|
84
86
|
|
87
|
+
## Configurables ##
|
88
|
+
|
89
|
+
(See Notes for more details)
|
90
|
+
|
91
|
+
* `gitProcess.integrationBranch` : The name of the integration branch. Defaults to `master`, but can be set to `develop` or other.
|
92
|
+
* `gitProcess.keepLocalIntegrationBranch` : Controls asking about removing the local integration branch. Defaults to 'false' (i.e., do not assume the branch should be there).
|
93
|
+
|
94
|
+
|
85
95
|
# Assumptions #
|
86
96
|
|
87
97
|
* You should **_never_** do any work directly on "`master`" (or whatever you define the mainline branch as): everything is done on a feature branch. This is a much safer and more flexible practice than doing everything on the same branch, but may seem odd to people used to old VCSs. In addition to being a much better way of working in general (see the F.A.Q. for more information), it is also a requirement to take advantage of Pull Request functionality.
|
88
98
|
* When working on a branch, you should be integrating with "`master`" as often as possible.
|
89
|
-
* "`git sync`" makes it extremely easy for you to get any changes that are made in "`master`" into your branch so you can react to it immediately.
|
99
|
+
* "`git sync`" makes it extremely easy for you to get any changes that are made in "`master`" into your branch so you can react to it immediately.
|
100
|
+
* "`git to-master`" then makes it easy to cleanly integrate the changes you have made. If you need to keep the current branch open, use the `--keep` option. Otherwise it closes the branch along with various other house-keeping duties.
|
90
101
|
* The process that you use should be essentially the same, regardless of whether you are working alone, or on a large distributed team.
|
91
102
|
* The exception here is "`git pull-request`" since you do not use pull requests when working solo or when pair-programming.
|
92
103
|
|
104
|
+
|
93
105
|
# Notes #
|
94
106
|
|
95
107
|
* After publishing changes to the main integration branch (i.e., "`git to-master`") the old feature branch is removed as part of cleanup. Git is then "parked" on a "`_parking_`" branch until a new feature branch is created. Work is not expected to be done on this branch, but any that is done is brought over to a newly created feature branch (i.e., "`git new-fb`").
|
@@ -138,23 +150,24 @@ If you have ever seen an "active" project that uses a process like "git-flow" th
|
|
138
150
|
This project is trying to promote clear communication about reality as it applies to the code, over micro-management over no-longer-relevant history. Thus rational for the judicious use of rebase.
|
139
151
|
|
140
152
|
|
141
|
-
## Configurables ##
|
142
|
-
See notes for more details
|
143
|
-
|
144
|
-
* GitHub authentication token
|
145
|
-
* The name of the integration branch (defaults to `origin/master`, but can be set to `develop` or other)
|
146
|
-
|
147
153
|
# Contributing #
|
148
154
|
|
149
155
|
## Coding Setup ##
|
150
156
|
|
151
157
|
1. Fork it
|
152
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
153
|
-
3. Commit your changes (`git commit
|
158
|
+
2. Create your feature branch (`git checkout -b my-new-feature origin/master`)
|
159
|
+
3. Commit your changes (`git commit`)
|
154
160
|
4. Push to the branch (`git push origin my-new-feature`)
|
155
161
|
5. Create new Pull Request
|
156
162
|
|
157
|
-
|
163
|
+
or, if using these scripts:
|
164
|
+
|
165
|
+
1. Fork it
|
166
|
+
2. `git new-fb my-new-feature
|
167
|
+
3. `git commit`
|
168
|
+
4. `git sync`
|
169
|
+
5. `git pull-request`
|
170
|
+
|
158
171
|
|
159
172
|
## License ##
|
160
173
|
|
data/bin/git-to-master
CHANGED
@@ -20,7 +20,8 @@ the integration branch, pushes to the integration branch, then does \
|
|
20
20
|
housecleaning.
|
21
21
|
|
22
22
|
If there is a problem, such as a merge conflict, this tries to \
|
23
|
-
resolve it automatically
|
23
|
+
resolve it automatically (including responding appropriately to
|
24
|
+
"rerere" merges). If it can not do so in an automated way, \
|
24
25
|
if tells you the steps involved for doing so manually.
|
25
26
|
|
26
27
|
"Housecleaning" includes such things as closing any \
|
@@ -28,7 +29,7 @@ Pull Request that may exist for the branch, removing the (now obsolete) \
|
|
28
29
|
local and remote feature branches, and then "parking" on the \
|
29
30
|
special "_parking_" branch.
|
30
31
|
|
31
|
-
Work is not expected to be done on the "
|
32
|
+
Work is not expected to be done on the "_parking_" branch, but any that is \
|
32
33
|
done is brought over to a newly created feature branch when you do \
|
33
34
|
"git new-fb".
|
34
35
|
|
@@ -46,10 +47,12 @@ for you:
|
|
46
47
|
$ git rebase origin/master
|
47
48
|
$ git push origin interesting_changes:master
|
48
49
|
# close pull request
|
49
|
-
$ git
|
50
|
+
$ git checkout -b _parking_ origin/master
|
50
51
|
$ git branch -d interesting_changes
|
51
52
|
$ git push origin :interesting_changes
|
52
53
|
|
54
|
+
If you use the --keep option, then the process stops after the first "push".
|
55
|
+
|
53
56
|
NOTES
|
54
57
|
|
55
58
|
* If you want to use a different integration branch other than "master",
|
@@ -59,6 +62,13 @@ NOTES
|
|
59
62
|
DESC
|
60
63
|
end
|
61
64
|
|
65
|
+
|
66
|
+
def extend_opts(parser)
|
67
|
+
parser.opt :keep, "Don't do any \"cleanup.\" It keeps the current local "+
|
68
|
+
"and remote branches, and does not close any "+
|
69
|
+
"outstanding pull requests.", :short => :k, :default => false
|
70
|
+
end
|
71
|
+
|
62
72
|
end
|
63
73
|
|
64
74
|
GitProc::RebaseToMaster.new('.', ToMasterOptions.new.parse_cli(File.basename(__FILE__), ARGV)).run
|
@@ -54,8 +54,11 @@ module GitProc
|
|
54
54
|
if not stat.modified.empty? or not stat.added.empty? or not stat.deleted.empty?
|
55
55
|
resp = ask_how_to_handle_changed_files(stat)
|
56
56
|
if resp == :commit
|
57
|
-
|
58
|
-
|
57
|
+
changed_files = (stat.added + stat.modified - stat.deleted).sort.uniq
|
58
|
+
|
59
|
+
add(changed_files) unless changed_files.empty?
|
60
|
+
remove(stat.deleted) unless stat.deleted.empty?
|
61
|
+
|
59
62
|
commit(nil)
|
60
63
|
else
|
61
64
|
stash_save
|
@@ -22,6 +22,12 @@ module GitProc
|
|
22
22
|
|
23
23
|
class RebaseToMaster < Process
|
24
24
|
|
25
|
+
def initialize(dir, opts)
|
26
|
+
@keep = opts[:keep]
|
27
|
+
super
|
28
|
+
end
|
29
|
+
|
30
|
+
|
25
31
|
def verify_preconditions
|
26
32
|
super
|
27
33
|
|
@@ -35,8 +41,11 @@ module GitProc
|
|
35
41
|
fetch(server_name)
|
36
42
|
proc_rebase(integration_branch)
|
37
43
|
push(server_name, branches.current, master_branch)
|
38
|
-
|
39
|
-
|
44
|
+
|
45
|
+
if not @keep
|
46
|
+
close_pull_request
|
47
|
+
remove_feature_branch
|
48
|
+
end
|
40
49
|
else
|
41
50
|
proc_rebase(integration_branch)
|
42
51
|
end
|
data/lib/git-process/version.rb
CHANGED
@@ -88,6 +88,7 @@ describe GitProc::ChangeFileHelper do
|
|
88
88
|
change_file_and_commit('modified file.txt', 'start')
|
89
89
|
change_file_and_commit('modified file2.txt', 'start')
|
90
90
|
change_file_and_commit('modified file3.txt', 'start')
|
91
|
+
change_file_and_commit('modified file4.txt', 'start')
|
91
92
|
change_file_and_commit('removed file.txt', 'content')
|
92
93
|
change_file_and_add('added file.txt', '')
|
93
94
|
change_file('modified file.txt', 'modified')
|
@@ -95,6 +96,7 @@ describe GitProc::ChangeFileHelper do
|
|
95
96
|
change_file_and_add('modified file3.txt', 'modified')
|
96
97
|
change_file('modified file2.txt', 'modified again')
|
97
98
|
change_file_and_add('removed file2.txt', 'content')
|
99
|
+
change_file_and_add('modified file4.txt', 'content')
|
98
100
|
File.delete(File.join(gitprocess.workdir, 'removed file.txt'))
|
99
101
|
File.delete(File.join(gitprocess.workdir, 'removed file2.txt'))
|
100
102
|
File.delete(File.join(gitprocess.workdir, 'modified file3.txt'))
|
@@ -104,6 +106,7 @@ describe GitProc::ChangeFileHelper do
|
|
104
106
|
# M "modified file.txt"
|
105
107
|
# MM "modified file2.txt"
|
106
108
|
# MD "modified file3.txt"
|
109
|
+
# M "modified file4.txt"
|
107
110
|
# D "removed file.txt"
|
108
111
|
# AD "removed file2.txt"
|
109
112
|
|
@@ -113,7 +116,7 @@ describe GitProc::ChangeFileHelper do
|
|
113
116
|
|
114
117
|
it 'should ask about modified files, then commit them' do
|
115
118
|
gitprocess.stub(:ask).and_return('c')
|
116
|
-
gitprocess.should_receive(:add).with(["added file.txt", "modified file.txt", "modified file2.txt"])
|
119
|
+
gitprocess.should_receive(:add).with(["added file.txt", "modified file.txt", "modified file2.txt", "modified file4.txt"])
|
117
120
|
gitprocess.should_receive(:remove).with(["modified file3.txt", "removed file.txt", "removed file2.txt"])
|
118
121
|
gitprocess.should_receive(:commit).with(nil)
|
119
122
|
|
@@ -132,7 +135,7 @@ describe GitProc::ChangeFileHelper do
|
|
132
135
|
|
133
136
|
stat = gitprocess.status
|
134
137
|
stat.added.should == ["added file.txt", "removed file2.txt"]
|
135
|
-
stat.modified.should == ["modified file.txt", "modified file2.txt"]
|
138
|
+
stat.modified.should == ["modified file.txt", "modified file2.txt", "modified file4.txt"]
|
136
139
|
stat.deleted.should == ["modified file3.txt", "removed file.txt"]
|
137
140
|
end
|
138
141
|
|
@@ -297,4 +297,19 @@ describe GitProc::RebaseToMaster do
|
|
297
297
|
|
298
298
|
end
|
299
299
|
|
300
|
+
|
301
|
+
describe ":keep option" do
|
302
|
+
|
303
|
+
it "should not try to close a pull request or remove remote branch" do
|
304
|
+
gitprocess.branch('fb', :base_branch => 'master')
|
305
|
+
|
306
|
+
rtm = GitProc::RebaseToMaster.new(clone('fb').workdir, {:log_level => log_level, :keep => true})
|
307
|
+
rtm.should_receive(:fetch)
|
308
|
+
rtm.should_receive(:push).with('origin', rtm.branches.current, 'master')
|
309
|
+
rtm.should_not_receive(:push).with('origin', nil, nil, :delete => 'fb')
|
310
|
+
rtm.runner
|
311
|
+
end
|
312
|
+
|
313
|
+
end
|
314
|
+
|
300
315
|
end
|
metadata
CHANGED
@@ -3,10 +3,10 @@ name: git-process
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
+
- 1
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
|
9
|
-
version: 0.9.7
|
8
|
+
- 1
|
9
|
+
version: 1.0.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jim Moore
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-
|
17
|
+
date: 2012-08-21 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|