flit 0.1.pre → 0.2.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +1,7 @@
1
- == 0.1.dev / 2010-08-27
1
+ == 0.2.pre / 2010-08-29
2
+ * Feature: Added delete, finish and list commands
3
+ * Feature: Commands can now have their own help pages. Accessible via 'flit help COMMAND'
4
+ * Bugfix: Commands are no longer initialised when loading their help docs
5
+
6
+ == 0.1.pre / 2010-08-27
2
7
  * Developer preview
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.pre
1
+ 0.2.pre
@@ -10,10 +10,12 @@ module Flit
10
10
 
11
11
  module Commands
12
12
  autoload :Base, "flit/commands"
13
+ autoload :Delete, "flit/commands/delete"
14
+ autoload :Finish, "flit/commands/finish"
13
15
  autoload :Init, "flit/commands/init"
16
+ autoload :List, "flit/commands/list"
14
17
  autoload :Start, "flit/commands/start"
15
18
  autoload :Stop, "flit/commands/stop"
16
- autoload :Finish, "flit/commands/finish"
17
19
  autoload :Version, "flit/commands/version"
18
20
  end
19
21
 
@@ -23,7 +25,7 @@ module Flit
23
25
  puts "Flit #{Version::STRING}"
24
26
 
25
27
  elsif ARGV[0].nil? || %w(help --help -h).include?(ARGV.first)
26
- puts Help.display
28
+ puts (ARGV[1].nil?) ? Help.display : Help.display_for_command(ARGV[1])
27
29
 
28
30
  else
29
31
  command = ARGV.first
@@ -0,0 +1,28 @@
1
+ module Flit
2
+ module Commands
3
+ class Delete
4
+ DESC = "Delete a feature or bugfix branch. Use with caution."
5
+ USAGE = "TYPE NAME"
6
+ OPTIONS = {
7
+ :type => "Can be either a feature or bugfix",
8
+ :name => "The name of your feature or bugfix",
9
+ }
10
+
11
+ def run(args)
12
+ # Gatekeepers
13
+ fatal "directory isn't a flit repository" unless is_flit?
14
+ show_help unless args.count == 2
15
+
16
+ type, name = args
17
+ config = open_config
18
+
19
+ h = HighLine.new
20
+
21
+ if h.agree("Delete #{type} branch '#{name}'? [yn]", true)
22
+ `git branch -d #{type}/#{name}`
23
+ end
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -2,11 +2,41 @@ module Flit
2
2
  module Commands
3
3
  class Finish
4
4
  DESC = "Finish up a feature or bugfix and merge it back into the development branch"
5
+ USAGE = "TYPE NAME"
6
+ OPTIONS = {
7
+ :type => "Can be either a feature or bugfix",
8
+ :name => "The name of your feature or bugfix",
9
+ }
5
10
 
6
11
  def run(args)
7
- # TODO: Show the help page if no options are set
12
+ # Gatekeepers
13
+ fatal "directory isn't a flit repository" unless is_flit?
14
+ show_help unless args.count == 2
8
15
 
9
- puts "flit: not implemented yet"
16
+ type, name = args
17
+ config = open_config
18
+
19
+ current_branch = nil
20
+ `git branch`.split("\n").each do |branch|
21
+ if branch[0,1] == '*'
22
+ current_branch = branch[2..-1].downcase.split('/')
23
+ end
24
+ end
25
+
26
+ `git checkout #{config[:branches][:bleeding_edge]}` unless current_branch[0] == config[:branches][:bleeding_edge]
27
+ `git pull`
28
+ `git checkout #{type}/#{name}`
29
+ `git merge master`
30
+
31
+ # Todo: do merge conflict detection here
32
+
33
+ `git checkout #{config[:branches][:bleeding_edge]}`
34
+ `git merge #{type}/#{name}`
35
+
36
+ `flit delete #{type} #{name}`
37
+
38
+ puts "\nMerged '#{type}/#{name}' into '#{config[:branches][:bleeding_edge]}'."
39
+ puts "You should now 'git push' your changes."
10
40
  end
11
41
 
12
42
  end
@@ -1,7 +1,7 @@
1
1
  module Flit
2
2
  module Commands
3
3
  class Init
4
- DESC = "Create a new Flit repository"
4
+ DESC = "Create a new Flit repository. Must be run from the top level directory in your Git repository."
5
5
 
6
6
  def run
7
7
  # Don't allow us to reinitialise an existing Flit repository
@@ -0,0 +1,55 @@
1
+ module Flit
2
+ module Commands
3
+ class List
4
+ DESC = "Allows you to view an outline of ongoing features and bugfixes in your Git repo.
5
+ If TYPE is not specified, 'list' will show you details of both features and bugfixes."
6
+ USAGE = "[TYPE]"
7
+ OPTIONS = {
8
+ :type => "Can be either a feature or bugfix",
9
+ }
10
+
11
+ def run(args)
12
+ # Gatekeeper
13
+ fatal "directory isn't a flit repository" unless is_flit?
14
+
15
+ type = args[0]
16
+ unless type.nil? || type == 'feature' || type == 'bugfix'
17
+ show_help
18
+ end
19
+
20
+ config = open_config
21
+ feature_branches = []
22
+ bugfix_branches = []
23
+ other_branches = []
24
+
25
+ `git branch`.each do |branch|
26
+ indicator = (branch[0,1] == '*') ? ' => ' : ' '
27
+ branch = branch[2..-1].downcase
28
+ split_branch = branch.split('/')
29
+
30
+ if branch.include?(config[:branches][:feature_prefix])
31
+ feature_branches << "#{indicator}#{split_branch[1..-1].join('/')}"
32
+ elsif branch.include?(config[:branches][:bugfix_prefix])
33
+ bugfix_branches << "#{indicator}#{split_branch[1..-1].join('/')}"
34
+ else
35
+ other_branches << "#{indicator}#{branch}"
36
+ end
37
+ end
38
+
39
+ list_branches "Features", feature_branches unless type == 'bugfix'
40
+ list_branches "Bugfixes", bugfix_branches unless type == 'feature'
41
+ list_branches "Other", other_branches if type.nil?
42
+ end
43
+
44
+ private
45
+ def list_branches(type, branches)
46
+ if branches.count > 0
47
+ puts "#{type}:"
48
+ branches.each {|f| puts f}
49
+ puts ""
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -1,11 +1,9 @@
1
1
  module Flit
2
2
  module Commands
3
3
  class Stop
4
- DESC = "Stop work on a feature of bugfix"
4
+ DESC = "Stop work on a feature or bugfix"
5
5
 
6
6
  def run(args)
7
- # TODO: Show the help page if no options are set
8
-
9
7
  `git checkout #{open_config[:branches][:bleeding_edge]}`
10
8
  end
11
9
 
@@ -7,7 +7,7 @@ Usage:
7
7
  Commands:
8
8
  {{commands}}
9
9
 
10
- help # Show this page
10
+ help [COMMAND] # Show this page
11
11
  -v, --version # Get Flit version information
12
12
 
13
13
  USAGE
@@ -26,7 +26,8 @@ USAGE
26
26
  begin
27
27
  command = f.gsub(/\.rb/, '')
28
28
  klass = "Flit::Commands::#{command.camelize}"
29
- commands << "#{command.ljust(20)}# #{ eval("#{klass}::DESC") }"
29
+ desc = eval("#{klass}::DESC").split('.')[0]
30
+ commands << "#{command.ljust(20)}# #{desc}"
30
31
  rescue
31
32
  end
32
33
  end
@@ -37,9 +38,21 @@ USAGE
37
38
 
38
39
 
39
40
  def self.display_for_command(klass)
41
+ if klass.split(/::/).count == 1
42
+ klass = "Flit::Commands::#{klass.camelize}"
43
+ end
44
+
40
45
  command = klass.split(/::/)[-1].downcase
46
+ help = ""
47
+
48
+ begin
49
+ help << "#{eval("#{klass}::DESC")}\n\n"
50
+ rescue
51
+ puts "flit: '#{command}' is not a command. See 'flit help'."
52
+ exit(0)
53
+ end
41
54
 
42
- help = "Usage:\n flit #{command}"
55
+ help << "Usage:\n flit #{command}"
43
56
  begin
44
57
  help << " #{eval("#{klass}::USAGE")}"
45
58
  rescue
@@ -1,5 +1,5 @@
1
1
  module Flit
2
2
  module Version
3
- STRING = "0.1.dev"
3
+ STRING = "0.2.pre"
4
4
  end
5
5
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: true
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - pre
9
- version: 0.1.pre
9
+ version: 0.2.pre
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matt Kirman
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-28 00:00:00 +01:00
17
+ date: 2010-08-29 00:00:00 +01:00
18
18
  default_executable: flit
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -49,8 +49,10 @@ files:
49
49
  - lib/flit/commands.rb
50
50
  - lib/flit/help.rb
51
51
  - lib/flit/version.rb
52
+ - lib/flit/commands/delete.rb
52
53
  - lib/flit/commands/finish.rb
53
54
  - lib/flit/commands/init.rb
55
+ - lib/flit/commands/list.rb
54
56
  - lib/flit/commands/start.rb
55
57
  - lib/flit/commands/stop.rb
56
58
  - lib/flit/commands/version.rb