added documentation and a license file
[rubygit.git] / lib / git / branch.rb
blob7cef94e60afc57e012ac255d36d618b26e4bf820
1 module Git
2   class Branch < Path
3     
4     attr_accessor :full, :remote, :name
5     
6     @base = nil
7     @gcommit = nil
8     
9     def initialize(base, name)
10       @remote = nil
11       @full = name
12       @base = base
13       
14       parts = name.split('/')
15       if parts[1]
16         @remote = Git::Remote.new(@base, parts[0])
17         @name = parts[1]
18       else
19         @name = parts[0]
20       end
21     end
22     
23     def gcommit
24       @gcommit = @base.object(name) if !@gcommit
25       @gcommit
26     end
27     
28     def checkout
29       check_if_create
30       @base.checkout(@name)
31     end
32     
33     
34     # g.branch('new_branch').in_branch do
35     #   # create new file
36     #   # do other stuff
37     #   return true # auto commits and switches back
38     # end
39     def in_branch (message = 'in branch work')
40       old_current = @base.lib.branch_current
41       checkout
42       if yield
43         @base.commit_all(message)
44       else
45         @base.reset_hard
46       end
47       @base.checkout(old_current)
48     end
49     
50     def create
51       check_if_create
52     end
53     
54     def delete
55       @base.lib.branch_delete(@name)
56     end
57     
58     def current
59       determine_current
60     end
61     
62     def merge(branch = nil, message = nil)
63       if branch
64         in_branch do 
65           @base.merge(branch, message)
66           false
67         end
68         # merge a branch into this one
69       else
70         # merge this branch into the current one
71         @base.merge(@name)
72       end
73     end
74     
75     def to_a
76       [@full]
77     end
78     
79     def to_s
80       @full
81     end
82     
83     private 
85       def check_if_create
86         @base.lib.branch_new(@name) rescue nil
87       end
88       
89       def determine_current
90         @base.lib.branch_current == @name
91       end
92     
93   end
94 end