dev_flow 0.2.4 → 0.3.0
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/README.md +59 -47
- data/bin/dw +30 -12
- data/lib/dev_flow/app.rb +19 -10
- data/lib/dev_flow/commands/{cleanup.rb → clean.rb} +0 -0
- data/lib/dev_flow/commands/close.rb +6 -9
- data/lib/dev_flow/commands/complete.rb +4 -6
- data/lib/dev_flow/commands/info.rb +49 -19
- data/lib/dev_flow/commands/progress.rb +3 -1
- data/lib/dev_flow/commands/ur.rb +11 -5
- data/lib/dev_flow/version.rb +1 -1
- data/tags +14 -6
- metadata +4 -4
data/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
DevFlow: ROADMAP/git based
|
|
2
|
-
|
|
1
|
+
DevFlow: ROADMAP/git based development flow control
|
|
2
|
+
=====================================================
|
|
3
3
|
|
|
4
4
|
WARNING: Pre-alpha implementation for internal use only.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Requirement
|
|
7
|
+
------------------
|
|
8
8
|
|
|
9
|
-
- A Bash
|
|
9
|
+
- A Bash compatible console (cygwin is supported)
|
|
10
10
|
- A workable git installation and `git` command in the path
|
|
11
11
|
- Ruby 1.9.x
|
|
12
12
|
|
|
@@ -18,27 +18,30 @@ Install
|
|
|
18
18
|
Work Flow
|
|
19
19
|
-------------
|
|
20
20
|
|
|
21
|
-
Under
|
|
21
|
+
Under your git working directory:
|
|
22
22
|
|
|
23
|
-
1. Write a `ROADMAP` file in
|
|
24
|
-
2. (Optional) create `members.yml` file define known developers
|
|
23
|
+
1. Write a `ROADMAP` file in the specified format
|
|
24
|
+
2. (Optional) create `config/members.yml` file define known developers
|
|
25
25
|
2. Run `dw` command
|
|
26
26
|
|
|
27
|
-
Sub-commands for typical
|
|
27
|
+
Sub-commands for typical development working flow jobs are:
|
|
28
28
|
|
|
29
29
|
$ dw [info] # show task information
|
|
30
30
|
|
|
31
|
+
$ dw switch [branch] # switch to branch, or list workable branches to switch to
|
|
32
|
+
($ dw s [branch] # alias of switch)
|
|
33
|
+
|
|
31
34
|
$ dw progress 80 # mark the task as completed at 80 percent
|
|
32
|
-
$ dw pg 80
|
|
35
|
+
($ dw pg 80 # same as progress)
|
|
33
36
|
|
|
34
37
|
$ dw complete # mark that the implemention is completed
|
|
35
38
|
|
|
36
|
-
$ dw close # this command is for project leader only, it will
|
|
37
|
-
# merge it into `develop` trunk
|
|
38
|
-
# locally and remotely.
|
|
39
|
+
$ dw close # this command is for project leader only, it will
|
|
40
|
+
# mark the current task closed, merge it into `develop` trunk
|
|
41
|
+
# and delete the git branch both locally and remotely.
|
|
39
42
|
|
|
40
|
-
$ dw release # like close but for release branch only.
|
|
41
|
-
#
|
|
43
|
+
$ dw release # like close but for release branch only. the change will
|
|
44
|
+
# be merged into both `develop` and `master` branch.
|
|
42
45
|
|
|
43
46
|
More commands may plug in later.
|
|
44
47
|
|
|
@@ -53,9 +56,7 @@ See more options by issue
|
|
|
53
56
|
|
|
54
57
|
$ dw -h
|
|
55
58
|
|
|
56
|
-
or
|
|
57
|
-
|
|
58
|
-
$ dw --help
|
|
59
|
+
(or `dw --help`)
|
|
59
60
|
|
|
60
61
|
### Information Header
|
|
61
62
|
|
|
@@ -79,13 +80,13 @@ treated as information header. Which should be in YAML format and should at leas
|
|
|
79
80
|
|
|
80
81
|
If you define `year` in the header, you can write date in `mm/dd` format instead
|
|
81
82
|
of `yyyy/mm/dd`. Usually you should define developers in a separate `members.yml` file,
|
|
82
|
-
but you can define extra members in the header area too (usually for who only join to
|
|
83
|
+
but you can define extra `members` in the header area too (usually for who only join to
|
|
83
84
|
one or few projects).
|
|
84
85
|
|
|
85
86
|
### Team and Leader
|
|
86
87
|
|
|
87
88
|
Leader has a higher priority than team members, only leader can edit roadmap,
|
|
88
|
-
close a task branch, and make a release
|
|
89
|
+
close a task branch, and make a release.
|
|
89
90
|
|
|
90
91
|
If you also defines `supervisor`, `moderator`, they can update the roadmap too,
|
|
91
92
|
but can not close or release a branch.
|
|
@@ -132,18 +133,20 @@ If the task need more than one resources use ; to separate them.
|
|
|
132
133
|
|
|
133
134
|
### Git Branching Models
|
|
134
135
|
|
|
135
|
-
- `master`, `develop
|
|
136
|
-
|
|
136
|
+
- `master`, `develop` branches are **trunks**.
|
|
137
|
+
|
|
138
|
+
You should modify code only in non-trunk branches and merge your change into trunks
|
|
139
|
+
according the following roles.
|
|
137
140
|
|
|
138
|
-
- The `master` trunk is a production ready branch
|
|
139
|
-
that contains latest code of completed feature that passed all integration test.
|
|
141
|
+
- The `master` trunk is a production ready branch
|
|
140
142
|
|
|
141
|
-
-
|
|
142
|
-
|
|
143
|
-
integration tests.
|
|
143
|
+
- `develop` is the **integration** trunk that contains latest code of completed
|
|
144
|
+
features that _passed_all_integration_ tests.
|
|
144
145
|
|
|
145
|
-
-
|
|
146
|
-
|
|
146
|
+
- You write programs under **task branches** that created from `develop`. You should
|
|
147
|
+
use `dw` often to merge newest changes from `develop` trunk.
|
|
148
|
+
|
|
149
|
+
Ensure all tests pass before you `dw complete` your branch.
|
|
147
150
|
|
|
148
151
|
### Semantic Versioning and Special Tasks
|
|
149
152
|
|
|
@@ -159,42 +162,51 @@ branches will merged into `master` trunk.
|
|
|
159
162
|
in the development flow (for example event for team code review,
|
|
160
163
|
customer acceptance review, etc.), but do not affect version numbers, so do other tasks.
|
|
161
164
|
|
|
162
|
-
Sometimes you may want to use 'prepare releases' such as `release_v0.1a`,
|
|
163
|
-
avoid sandwich tasks between prepare releases and releases.
|
|
165
|
+
Sometimes you may want to use 'prepare releases' such as `release_v0.1a`,
|
|
166
|
+
`release_v0.1b`, avoid sandwich tasks between prepare releases and releases.
|
|
164
167
|
|
|
165
168
|
Local Configuration
|
|
166
169
|
---------------------
|
|
167
170
|
|
|
168
|
-
Default is stored in `.dev_flow` file and will be set to `git`'s ignore list
|
|
169
|
-
(so these settings only affect your local working directory
|
|
171
|
+
Default is stored in `.dev_flow` file and will be set to `git`'s ignore list
|
|
172
|
+
(`.gitignore`), so these settings only affect your local working directory.
|
|
170
173
|
|
|
171
|
-
Without this file `dw` will go into the initialization mode
|
|
174
|
+
Without this file `dw` will go into the initialization mode
|
|
175
|
+
(by asking you questions about yourself and your git remote server).
|
|
172
176
|
|
|
173
177
|
You can use `--local-config FILE` to store those information in an other file name.
|
|
174
178
|
|
|
175
|
-
`.dev_flow` is also in yaml format and the most important key are
|
|
176
|
-
`whoami` specifies who is currently working on the
|
|
177
|
-
and `git_remote` defines witch git remote server to use
|
|
178
|
-
|
|
179
|
+
`.dev_flow` is also in yaml format and the most important key are
|
|
180
|
+
`whoami` and `git_remote`, `whoami` specifies who is currently working on the
|
|
181
|
+
local working directory, and `git_remote` defines witch git remote server to use
|
|
182
|
+
(default is `origin`).
|
|
183
|
+
|
|
184
|
+
If `git_remote` defined, `dw` command will try to sync with the remote git server
|
|
185
|
+
when you use `dw`, from both remote branch matches your local branch, and `develop`
|
|
186
|
+
trunk. If you do not want to sync, specify the `--offline` (`-o`) option.
|
|
179
187
|
|
|
180
188
|
Command Details
|
|
181
189
|
-------------------
|
|
182
190
|
|
|
183
191
|
- `dw init` default command if no `.dev_flow` file found.
|
|
184
192
|
|
|
185
|
-
- `dw [info]` or `dw` without command will list
|
|
186
|
-
|
|
193
|
+
- `dw [info]` or `dw` without command will list tasks defined in `ROADMAP`.
|
|
194
|
+
If current branch is `develop`, `dw` also ask you for switch to branches.
|
|
195
|
+
|
|
196
|
+
- `dw switch [branch]` will list a workable branches to choose to switch to,
|
|
197
|
+
but will only show tasks list if the working directory is not clean.
|
|
187
198
|
|
|
188
|
-
- `dw progress 0-98` set task progress. `dw pg` is an alias of `dw progress`.
|
|
189
|
-
encouraged to frequently use this command to
|
|
190
|
-
several times a day).
|
|
199
|
+
- `dw progress 0-98` set task progress to 0-99. `dw pg` is an alias of `dw progress`.
|
|
200
|
+
You are encouraged to frequently use this command to push you changes to the
|
|
201
|
+
remote server (typically several times a day).
|
|
191
202
|
|
|
192
|
-
- `dw complete` set task progress to 99 (
|
|
193
|
-
close it.
|
|
203
|
+
- `dw complete` set task progress to 99 (mark the task is completed), then you
|
|
204
|
+
should inform the leader to review/test and close it.
|
|
194
205
|
|
|
195
206
|
- `dw close`/`dw release` close the task by the leader, or release it (to master trunk).
|
|
196
207
|
|
|
197
|
-
- `dw update-roadmap` or `dw ur` used for update the roadmap
|
|
208
|
+
- `dw update-roadmap` or `dw ur` used for update the roadmap, This command can only
|
|
209
|
+
be used on `devleop` trunk.
|
|
198
210
|
|
|
199
|
-
- `dw
|
|
211
|
+
- `dw clean` will delete local branches corresponding completed tasks.
|
|
200
212
|
|
data/bin/dw
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
# vim: syn=ruby
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
$: << 'lib' # debug only
|
|
5
5
|
|
|
6
6
|
require "optparse"
|
|
7
7
|
require "term/ansicolor"
|
|
@@ -12,28 +12,40 @@ options = {}
|
|
|
12
12
|
|
|
13
13
|
optparse = OptionParser.new do |opts|
|
|
14
14
|
opts.banner = "Usage: dw [options] [command]"
|
|
15
|
+
opts.separator ""
|
|
16
|
+
opts.separator "Commands:"
|
|
17
|
+
opts.separator " [info] : show list of tasks"
|
|
18
|
+
opts.separator " switch : show list of tasks, and tasks can swith to"
|
|
19
|
+
opts.separator " switch [branch]: directly switch to a branch"
|
|
20
|
+
opts.separator " s [branch]: alias of switch"
|
|
21
|
+
opts.separator " update-roadmap : on develop branch, update the roadmap file"
|
|
22
|
+
opts.separator " ur : alias of update-roadmap"
|
|
23
|
+
opts.separator " progress <percentage>: change the task progress to percentage (0-99)"
|
|
24
|
+
opts.separator " p <percentage> : alias of progress"
|
|
25
|
+
opts.separator " complete : complete a task, raise progress to 99"
|
|
26
|
+
opts.separator " close : close the task as a leader"
|
|
27
|
+
opts.separator " release : close a release task"
|
|
28
|
+
opts.separator " clean[up] : delete local branches that already completed"
|
|
29
|
+
opts.separator ""
|
|
30
|
+
opts.separator "Options:"
|
|
15
31
|
|
|
16
32
|
options[:roadmap] = 'ROADMAP' # the roadmap file
|
|
17
|
-
opts.on('-r
|
|
33
|
+
opts.on('-r FILE', '--roadmap FILE', 'use an other roadmap file') do |roadmap|
|
|
18
34
|
options[:roadmap] = roadmap
|
|
19
35
|
end
|
|
20
36
|
|
|
21
37
|
options[:local_config] = '.dev_flow'
|
|
22
|
-
opts.on('-l
|
|
38
|
+
opts.on('-l FILE', '--local-config FILE', 'use an other local configuration file') do |lc|
|
|
23
39
|
options[:local_config] = lc
|
|
24
40
|
end
|
|
25
41
|
|
|
26
42
|
options[:members_file] = 'members.yml' if File.exists? ('members.yml')
|
|
27
43
|
options[:members_file] = 'config/members.yml' if File.exists? ('config/members.yml')
|
|
28
|
-
opts.on('-m
|
|
44
|
+
opts.on('-m FILE', '--members_file FILE', 'use an other members file') do |mf|
|
|
29
45
|
options[:members_file] = mf
|
|
30
46
|
raise "the specified members file #{mf} is not exists." unless File.exists? mf
|
|
31
47
|
end
|
|
32
48
|
|
|
33
|
-
opts.on('-i', '--filter-tasks', 'show only tasks assigned to me') do
|
|
34
|
-
options[:filter_tasks] = true
|
|
35
|
-
end
|
|
36
|
-
|
|
37
49
|
opts.on('-o', '--offline', 'do not use remote git server') do
|
|
38
50
|
options[:offline] = true
|
|
39
51
|
end
|
|
@@ -52,13 +64,13 @@ optparse.parse!(ARGV)
|
|
|
52
64
|
|
|
53
65
|
# determine the command
|
|
54
66
|
command = ARGV[0] || 'info'
|
|
55
|
-
cmd_alias = {'pg' => 'progress', 'update-roadmap' => 'ur', 'clean' => 'cleanup'}
|
|
67
|
+
cmd_alias = {'pg' => 'progress', 'update-roadmap' => 'ur', 'clean' => 'cleanup', 's' => 'switch'}
|
|
56
68
|
command = cmd_alias[command] if cmd_alias[command]
|
|
57
69
|
|
|
58
|
-
if %w[info init complete progress close release ur update-roadmap cleanup clean].include? command
|
|
70
|
+
if %w[info init complete progress close release ur update-roadmap cleanup clean switch].include? command
|
|
59
71
|
options[:command] = command
|
|
60
72
|
else
|
|
61
|
-
puts "
|
|
73
|
+
puts "Unknown command #{command}".red
|
|
62
74
|
exit
|
|
63
75
|
end
|
|
64
76
|
|
|
@@ -67,7 +79,7 @@ unless File.exists? (options[:roadmap])
|
|
|
67
79
|
exit
|
|
68
80
|
end
|
|
69
81
|
|
|
70
|
-
#
|
|
82
|
+
# enter init mode unless .dev_flow file exists
|
|
71
83
|
unless command == 'init'
|
|
72
84
|
unless File.exists? (options[:local_config])
|
|
73
85
|
puts "Initializing your environment ... "
|
|
@@ -81,4 +93,10 @@ if command == 'release'
|
|
|
81
93
|
command = 'close'
|
|
82
94
|
end
|
|
83
95
|
|
|
96
|
+
if command == 'switch'
|
|
97
|
+
options[:switch] = true
|
|
98
|
+
options[:branch] = ARGV[1]
|
|
99
|
+
command = 'info'
|
|
100
|
+
end
|
|
101
|
+
|
|
84
102
|
DevFlow.invoke!(options, command)
|
data/lib/dev_flow/app.rb
CHANGED
|
@@ -72,6 +72,10 @@ module DevFlow
|
|
|
72
72
|
@logger.info "[INFO] " + msg
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
+
def debug msg
|
|
76
|
+
@logger.debug "[DEBUG] " + msg
|
|
77
|
+
end
|
|
78
|
+
|
|
75
79
|
# helper function
|
|
76
80
|
# ------------------------------
|
|
77
81
|
def all_member_names
|
|
@@ -87,9 +91,10 @@ module DevFlow
|
|
|
87
91
|
@members[@config["leader"]].display_name
|
|
88
92
|
end
|
|
89
93
|
|
|
90
|
-
def task
|
|
94
|
+
def task branch = nil
|
|
95
|
+
branch = @git.current_branch unless branch
|
|
91
96
|
@roadmap.tasks.each do |task|
|
|
92
|
-
return task if task.branch_name ==
|
|
97
|
+
return task if task.branch_name == branch
|
|
93
98
|
end
|
|
94
99
|
nil
|
|
95
100
|
end
|
|
@@ -122,6 +127,10 @@ module DevFlow
|
|
|
122
127
|
@roadmap.tasks.select {|task| task.progress == 99}
|
|
123
128
|
end
|
|
124
129
|
|
|
130
|
+
def sync?
|
|
131
|
+
@config["git_remote"] and (not @config[:offline])
|
|
132
|
+
end
|
|
133
|
+
|
|
125
134
|
# display informations
|
|
126
135
|
# -----------------------
|
|
127
136
|
def hr; "-"*76 end
|
|
@@ -188,21 +197,21 @@ module DevFlow
|
|
|
188
197
|
# interactive methods with git remote server
|
|
189
198
|
# ------------------------------------------------------
|
|
190
199
|
def ask_rebase force = false
|
|
191
|
-
return false if @config[:offline]
|
|
200
|
+
# return false unless sync? #if @config[:offline]
|
|
192
201
|
|
|
193
|
-
unless force
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
end
|
|
202
|
+
#unless force
|
|
203
|
+
# print "Rebase your wokring directory? [Y/n]:".bold.yellow
|
|
204
|
+
# ans = STDIN.gets.chomp!
|
|
205
|
+
# return false if ans == 'n'
|
|
206
|
+
#end
|
|
198
207
|
|
|
199
208
|
# do the rebase:
|
|
200
|
-
if
|
|
209
|
+
if sync?
|
|
201
210
|
info "Rebase you working directory from #{@config["git_remote"]}/devleop"
|
|
202
211
|
@git.rebase! @config["git_remote"], 'develop'
|
|
203
212
|
load_roadmap # load roadmap again
|
|
204
213
|
else
|
|
205
|
-
|
|
214
|
+
warn "Git remote not defined, skip rebase."
|
|
206
215
|
end
|
|
207
216
|
end
|
|
208
217
|
|
|
File without changes
|
|
@@ -9,6 +9,7 @@ module DevFlow
|
|
|
9
9
|
# whether I am working on a proper task branch
|
|
10
10
|
current_task = self.task
|
|
11
11
|
error "Not on a known task branch. Can not continue." unless current_task
|
|
12
|
+
error "Can not close task offline" unless sync?
|
|
12
13
|
|
|
13
14
|
if current_task and (in_release? or current_task.branch_name =~ /^hotfix\_/)
|
|
14
15
|
error "Use command 'release' to close a release/hotfix branch." unless @config[:release]
|
|
@@ -21,7 +22,7 @@ module DevFlow
|
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
|
|
24
|
-
self.ask_rebase
|
|
25
|
+
self.ask_rebase # force rebase
|
|
25
26
|
puts hr
|
|
26
27
|
|
|
27
28
|
# commit you current branch and push
|
|
@@ -31,10 +32,8 @@ module DevFlow
|
|
|
31
32
|
|
|
32
33
|
info "commit progress"
|
|
33
34
|
`git commit -am '#{message}'`
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
`git push #{@config["git_remote"]} #{current_task.branch_name}`
|
|
37
|
-
end
|
|
35
|
+
info "push your progress to remote server"
|
|
36
|
+
`git push #{@config["git_remote"]} #{current_task.branch_name}`
|
|
38
37
|
|
|
39
38
|
# goto develop branch and merge
|
|
40
39
|
`git checkout develop`
|
|
@@ -64,10 +63,8 @@ module DevFlow
|
|
|
64
63
|
info "Delete closed branch #{current_task.branch_name}"
|
|
65
64
|
`git branch -d #{current_task.branch_name}`
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
`git push #{@config["git_remote"]} :#{current_task.branch_name}`
|
|
70
|
-
end
|
|
66
|
+
info "Delete closed branch remotely"
|
|
67
|
+
`git push #{@config["git_remote"]} :#{current_task.branch_name}`
|
|
71
68
|
end
|
|
72
69
|
|
|
73
70
|
end # class
|
|
@@ -8,7 +8,6 @@ module DevFlow
|
|
|
8
8
|
current_task = self.task
|
|
9
9
|
error "Not on a known task branch. Can not continue." unless current_task
|
|
10
10
|
|
|
11
|
-
info "Assigned resources for current task: " + current_task.resources.join(", ")
|
|
12
11
|
info "Task resource list are #{current_task.resources.join(',')}, you are #{@config["whoami"]}"
|
|
13
12
|
unless current_task.resources.include?(@config["whoami"])
|
|
14
13
|
if i_have_power?
|
|
@@ -21,7 +20,8 @@ module DevFlow
|
|
|
21
20
|
end
|
|
22
21
|
end
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
error "Can not work offline for complete a task" unless sync?
|
|
24
|
+
self.ask_rebase
|
|
25
25
|
puts hr
|
|
26
26
|
|
|
27
27
|
# commit you current branch and push
|
|
@@ -31,10 +31,8 @@ module DevFlow
|
|
|
31
31
|
|
|
32
32
|
info "Commit your progress"
|
|
33
33
|
`git commit -am '#{message}'`
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
`git push #{@config["git_remote"]} #{current_task.branch_name}`
|
|
37
|
-
end
|
|
34
|
+
info "Push your progress to remote server"
|
|
35
|
+
`git push #{@config["git_remote"]} #{current_task.branch_name}`
|
|
38
36
|
|
|
39
37
|
# rewrite progress in ROADMAP file under develop trunk
|
|
40
38
|
upload_progress! current_task, progress, true
|
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
module DevFlow
|
|
2
2
|
class Info < App
|
|
3
3
|
|
|
4
|
+
def update_task task
|
|
5
|
+
if task.progress > 0
|
|
6
|
+
# update your work directory
|
|
7
|
+
`git pull #{@config["git_remote"]} #{task.branch_name}` if sync?
|
|
8
|
+
else
|
|
9
|
+
# if the task not started yet, update progress
|
|
10
|
+
upload_progress!(task, 10)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
ask_rebase
|
|
14
|
+
end
|
|
15
|
+
|
|
4
16
|
def process!
|
|
5
17
|
self.hello
|
|
6
18
|
|
|
7
19
|
current_task = self.task
|
|
8
|
-
|
|
20
|
+
if current_task or in_trunk?
|
|
21
|
+
self.ask_rebase
|
|
22
|
+
else
|
|
23
|
+
error "Not in a known task branch"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
if current_task
|
|
27
|
+
# if complete, switch to develop
|
|
28
|
+
if current_task.is_completed?
|
|
29
|
+
warn "Your task is completed and closed, now swith to develop trunk"
|
|
30
|
+
`git checkout develop`
|
|
31
|
+
warn "Your may want `dw clean` your local working directory"
|
|
32
|
+
exit
|
|
33
|
+
end
|
|
34
|
+
end
|
|
9
35
|
|
|
10
36
|
puts hr
|
|
11
37
|
|
|
@@ -21,26 +47,30 @@ module DevFlow
|
|
|
21
47
|
# if work directory is clean, ready to switch
|
|
22
48
|
if i_am_leader? and in_release? # concentrate
|
|
23
49
|
puts "You are in a release branch, please release it as soon as possible."
|
|
24
|
-
else # otherwise show switch
|
|
25
|
-
puts "You switch to other branches:".bold.yellow
|
|
26
|
-
puts "Type #{0.to_s.bold} to switch to develop trunk.".bold.blue unless @git.current_branch == 'develop'
|
|
27
|
-
puts "Simply press enter to keep working on the current branch."
|
|
28
|
-
print @waiting.keys.join(", ") + ":"
|
|
29
|
-
|
|
30
|
-
ans = STDIN.gets.chomp!
|
|
31
|
-
if ans == 0.to_s
|
|
32
|
-
switch_to! 'develop'
|
|
33
|
-
`git pull #{@config["git_remote"]} develop` if @config["git_remote"]
|
|
34
|
-
elsif @waiting[ans.to_i]
|
|
35
|
-
switch_to! @waiting[ans.to_i].branch_name
|
|
36
|
-
|
|
37
|
-
# update your work directory
|
|
38
|
-
`git pull #{@config["git_remote"]} #{@waiting[ans.to_i].branch_name}` if @config["git_remote"] and @waiting[ans.to_i].progress > 0
|
|
50
|
+
else # otherwise show switch @config
|
|
39
51
|
|
|
40
|
-
|
|
41
|
-
|
|
52
|
+
@config[:switch] = true if @git.current_branch == 'develop'
|
|
53
|
+
if @config[:switch] and @config[:branch]
|
|
54
|
+
switch_task = self.task @config[:branch]
|
|
55
|
+
error "Can not find ROADMAP task for branch #{@config[:branch]}" unless switch_task
|
|
56
|
+
switch_to! @config[:branch] if @config[:branch]
|
|
57
|
+
update_task switch_task
|
|
58
|
+
elsif @config[:switch]
|
|
59
|
+
puts "You can switch to other branches:".bold.yellow
|
|
60
|
+
puts "Type #{0.to_s.bold} to switch to develop trunk.".bold.blue unless @git.current_branch == 'develop'
|
|
61
|
+
print @waiting.keys.join(", ") + ":"
|
|
62
|
+
ans = STDIN.gets.chomp!
|
|
63
|
+
if ans == 0.to_s
|
|
64
|
+
switch_to! 'develop'
|
|
65
|
+
`git pull #{@config["git_remote"]} develop` if @config["git_remote"]
|
|
66
|
+
elsif @waiting[ans.to_i]
|
|
67
|
+
switch_to! @waiting[ans.to_i].branch_name
|
|
68
|
+
update_task @waiting[ans.to_i]
|
|
69
|
+
else
|
|
70
|
+
error "Invalid input #{ans}. Can not continue." if ans and ans.size > 0
|
|
71
|
+
end
|
|
42
72
|
else
|
|
43
|
-
|
|
73
|
+
# dw show information only. quit.
|
|
44
74
|
end
|
|
45
75
|
end
|
|
46
76
|
else # if the wd is not clean
|
|
@@ -22,9 +22,11 @@ module DevFlow
|
|
|
22
22
|
|
|
23
23
|
info "commit your progress"
|
|
24
24
|
`git commit -am '#{message}'`
|
|
25
|
-
if
|
|
25
|
+
if sync?
|
|
26
26
|
info "push your progress to remote server"
|
|
27
27
|
`git push #{@config["git_remote"]} #{current_task.branch_name}`
|
|
28
|
+
else
|
|
29
|
+
warn "your change did not pushed to the remote server."
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
# rewrite progress in ROADMAP file under develop trunk
|
data/lib/dev_flow/commands/ur.rb
CHANGED
|
@@ -2,15 +2,21 @@ module DevFlow
|
|
|
2
2
|
class Ur < App
|
|
3
3
|
|
|
4
4
|
def process!
|
|
5
|
-
error "Not on develop trunk" unless @git.current_branch == 'develop'
|
|
5
|
+
error "Not on the develop trunk" unless @git.current_branch == 'develop'
|
|
6
6
|
error "Only leader/moderator and supervisor can edit ROADMAP" unless i_have_power?
|
|
7
|
+
|
|
7
8
|
#p @git.modified_files
|
|
8
9
|
error "No change detected on #{@config[:roadmap]}" unless @git.modified_files.include? File.expand_path(@config[:roadmap])
|
|
9
10
|
|
|
10
|
-
`git add
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
`git add ROADMAP`
|
|
12
|
+
msg = ARGV[1] || 'update roadmap'
|
|
13
|
+
`git commit -am '#{msg}'`
|
|
14
|
+
if sync?
|
|
15
|
+
info "Push your change to the remote server"
|
|
16
|
+
`git push #{@config["git_remote"]} develop`
|
|
17
|
+
else
|
|
18
|
+
warn "Offline update for ROADMAP."
|
|
19
|
+
end
|
|
14
20
|
end
|
|
15
21
|
|
|
16
22
|
end # class
|
data/lib/dev_flow/version.rb
CHANGED
data/tags
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
!_TAG_PROGRAM_VERSION 5.8 //
|
|
7
7
|
App lib/dev_flow/app.rb /^ class App$/;" c class:DevFlow
|
|
8
8
|
Cleanup lib/dev_flow/commands/cleanup.rb /^ class Cleanup < App$/;" c class:DevFlow
|
|
9
|
+
Close lib/dev_flow/commands/close.rb /^ class Close < App$/;" c class:DevFlow
|
|
9
10
|
Complete lib/dev_flow/commands/complete.rb /^ class Complete < App$/;" c class:DevFlow
|
|
11
|
+
DateName lib/dev_flow/date_name.rb /^module DateName$/;" m
|
|
10
12
|
DevFlow lib/dev_flow.rb /^module DevFlow$/;" m
|
|
11
13
|
DevFlow lib/dev_flow/app.rb /^module DevFlow$/;" m
|
|
12
14
|
DevFlow lib/dev_flow/commands/cleanup.rb /^module DevFlow$/;" m
|
|
15
|
+
DevFlow lib/dev_flow/commands/close.rb /^module DevFlow$/;" m
|
|
13
16
|
DevFlow lib/dev_flow/commands/complete.rb /^module DevFlow$/;" m
|
|
14
17
|
DevFlow lib/dev_flow/commands/info.rb /^module DevFlow$/;" m
|
|
15
18
|
DevFlow lib/dev_flow/commands/init.rb /^module DevFlow$/;" m
|
|
@@ -30,10 +33,10 @@ RoadMap lib/dev_flow/roadmap.rb /^ class RoadMap$/;" c class:DevFlow
|
|
|
30
33
|
String bin/dw /^class String; include Term::ANSIColor end$/;" c
|
|
31
34
|
Task lib/dev_flow/task.rb /^ class Task$/;" c class:DevFlow
|
|
32
35
|
Task lib/dev_flow/task_console.rb /^ class Task$/;" c class:DevFlow
|
|
33
|
-
|
|
36
|
+
Ur lib/dev_flow/commands/ur.rb /^ class Ur < App$/;" c class:DevFlow
|
|
34
37
|
add_to_gitignore lib/dev_flow/commands/init.rb /^ def add_to_gitignore$/;" f class:DevFlow.Init
|
|
35
38
|
all_member_names lib/dev_flow/app.rb /^ def all_member_names$/;" f class:DevFlow
|
|
36
|
-
as_title lib/dev_flow/task_console.rb /^ def as_title header$/;" f class:DevFlow.Task
|
|
39
|
+
as_title lib/dev_flow/task_console.rb /^ def as_title header = ' '$/;" f class:DevFlow.Task
|
|
37
40
|
ask_rebase lib/dev_flow/app.rb /^ def ask_rebase force = false$/;" f class:DevFlow.hr.hrb
|
|
38
41
|
branches lib/dev_flow/girc.rb /^ def branches$/;" f
|
|
39
42
|
config lib/dev_flow/girc.rb /^ def config$/;" f class:DevFlow
|
|
@@ -75,31 +78,36 @@ is_urgent? lib/dev_flow/task.rb /^ def is_urgent? # usually orange$/;" f cla
|
|
|
75
78
|
is_workable? lib/dev_flow/task_console.rb /^ def is_workable?$/;" f class:DevFlow.Task
|
|
76
79
|
last_task lib/dev_flow/roadmap.rb /^ def last_task$/;" f class:DevFlow.RoadMap
|
|
77
80
|
leader_name lib/dev_flow/app.rb /^ def leader_name$/;" f class:DevFlow
|
|
81
|
+
load_roadmap lib/dev_flow/app.rb /^ def load_roadmap$/;" f class:DevFlow.App
|
|
78
82
|
me lib/dev_flow/girc.rb /^ def me$/;" f
|
|
79
83
|
modified_files lib/dev_flow/girc.rb /^ def modified_files$/;" f class:DevFlow.Girc
|
|
80
84
|
new_branch! lib/dev_flow/girc.rb /^ def new_branch! branch, remote=nil$/;" f
|
|
85
|
+
new_version lib/dev_flow/app.rb /^ def new_version branch_name$/;" f class:DevFlow.hr.hrb
|
|
86
|
+
new_version spec/version_spec.rb /^def new_version branch_name, git_tags$/;" f
|
|
81
87
|
parse lib/dev_flow/roadmap.rb /^ def parse file = nil$/;" f class:DevFlow.RoadMap
|
|
82
88
|
parse lib/dev_flow/task.rb /^ def parse line, headers = {}$/;" f class:DevFlow.Task
|
|
83
|
-
process lib/dev_flow/commands/info.rb /^ def process$/;" f class:DevFlow.Info
|
|
84
89
|
process! lib/dev_flow/commands/cleanup.rb /^ def process!$/;" f class:DevFlow.Cleanup
|
|
90
|
+
process! lib/dev_flow/commands/close.rb /^ def process!$/;" f class:DevFlow.Close
|
|
85
91
|
process! lib/dev_flow/commands/complete.rb /^ def process!$/;" f class:DevFlow.Complete
|
|
86
92
|
process! lib/dev_flow/commands/info.rb /^ def process!$/;" f class:DevFlow.Info
|
|
87
93
|
process! lib/dev_flow/commands/init.rb /^ def process!$/;" f class:DevFlow.Init
|
|
88
94
|
process! lib/dev_flow/commands/progress.rb /^ def process!$/;" f class:DevFlow.Progress
|
|
89
|
-
process! lib/dev_flow/commands/ur.rb /^ def process!$/;" f class:DevFlow.
|
|
95
|
+
process! lib/dev_flow/commands/ur.rb /^ def process!$/;" f class:DevFlow.Ur
|
|
90
96
|
pull! lib/dev_flow/girc.rb /^ def pull! remote = 'origin'$/;" f
|
|
91
97
|
rebase! lib/dev_flow/girc.rb /^ def rebase! remote = 'origin', branch = 'develop'$/;" f
|
|
92
98
|
remote_list lib/dev_flow/girc.rb /^ def remote_list$/;" f
|
|
93
|
-
rewrite lib/dev_flow/roadmap.rb /^ def rewrite task_hash$/;" f class:DevFlow.RoadMap
|
|
99
|
+
rewrite! lib/dev_flow/roadmap.rb /^ def rewrite! task_hash$/;" f class:DevFlow.RoadMap
|
|
94
100
|
stash! lib/dev_flow/girc.rb /^ def stash!$/;" f
|
|
95
101
|
stash_pop! lib/dev_flow/girc.rb /^ def stash_pop!$/;" f
|
|
96
102
|
switch_to! lib/dev_flow/app.rb /^ def switch_to! branch$/;" f class:DevFlow.hr.hrb
|
|
97
103
|
task lib/dev_flow/app.rb /^ def task$/;" f class:DevFlow
|
|
98
104
|
tasks_for_close lib/dev_flow/app.rb /^ def tasks_for_close $/;" f class:DevFlow
|
|
105
|
+
team_member_names lib/dev_flow/roadmap.rb /^ def team_member_names$/;" f class:DevFlow.RoadMap
|
|
99
106
|
title lib/dev_flow/roadmap.rb /^ def title$/;" f class:DevFlow.RoadMap
|
|
100
|
-
upload_progress! lib/dev_flow/app.rb /^ def upload_progress! task, progress, is_complete$/;" f class:DevFlow.hr.hrb
|
|
107
|
+
upload_progress! lib/dev_flow/app.rb /^ def upload_progress! task, progress, is_complete = false$/;" f class:DevFlow.hr.hrb
|
|
101
108
|
user_name lib/dev_flow/app.rb /^ def user_name$/;" f class:DevFlow
|
|
102
109
|
validate! lib/dev_flow/task.rb /^ def validate!$/;" f class:DevFlow.Task
|
|
103
110
|
warn lib/dev_flow/app.rb /^ def warn msg$/;" f class:DevFlow
|
|
104
111
|
wd_clean? lib/dev_flow/girc.rb /^ def wd_clean?$/;" f
|
|
105
112
|
write_local_config lib/dev_flow/commands/init.rb /^ def write_local_config hash$/;" f class:DevFlow.Init
|
|
113
|
+
zh lib/dev_flow/date_name.rb /^ def self.zh from_date, to_date = DateTime.now$/;" F class:DateName
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dev_flow
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-04-
|
|
12
|
+
date: 2013-04-21 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: term-ansicolor
|
|
@@ -60,7 +60,7 @@ files:
|
|
|
60
60
|
- examples/members.yml
|
|
61
61
|
- lib/dev_flow.rb
|
|
62
62
|
- lib/dev_flow/app.rb
|
|
63
|
-
- lib/dev_flow/commands/
|
|
63
|
+
- lib/dev_flow/commands/clean.rb
|
|
64
64
|
- lib/dev_flow/commands/close.rb
|
|
65
65
|
- lib/dev_flow/commands/complete.rb
|
|
66
66
|
- lib/dev_flow/commands/info.rb
|
|
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
108
108
|
version: '0'
|
|
109
109
|
requirements: []
|
|
110
110
|
rubyforge_project:
|
|
111
|
-
rubygems_version: 1.8.
|
|
111
|
+
rubygems_version: 1.8.24
|
|
112
112
|
signing_key:
|
|
113
113
|
specification_version: 3
|
|
114
114
|
summary: a bundle of tools for ROADMAP/git based development flow control.
|