git-it 0.0.4

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.rdoc ADDED
@@ -0,0 +1,22 @@
1
+ = git-it! get it?
2
+
3
+ Commands to help you git it.
4
+
5
+ Author:: Ronald Maravilla (mailto:more.ron.too@gmail.com)
6
+ License:: Undecided
7
+
8
+ == Install
9
+
10
+ gem install git-it
11
+
12
+ == Use
13
+
14
+ Open current branch in the web. Use it as an easy way to issue pull request in github.
15
+
16
+ git it opened_in_the_web
17
+
18
+ == Documentation
19
+
20
+ API Documentation is available {here}[http://more-ron.github.com/git-it/index.html]. Recommend starting with GitIt::Controller.
21
+
22
+ :include:git-it.rdoc
data/bin/git-it ADDED
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gli'
4
+ require 'git-it'
5
+
6
+ include GLI::App
7
+ extend GitIt::GlobalHelper
8
+
9
+ program_desc 'Git it! Get it?'
10
+
11
+ version GitIt::VERSION
12
+
13
+
14
+ # ==================
15
+ # = Global Options =
16
+ # ==================
17
+
18
+ desc 'debug mode'
19
+ switch [:d,:debug]
20
+
21
+ desc 'SHA1'
22
+ default_value '{{current_head}}'
23
+ arg_name 'sha'
24
+ flag [:s,:sha]
25
+
26
+
27
+ # ============
28
+ # = Commands =
29
+ # ============
30
+
31
+ desc 'Opens current branch in web browser.'
32
+
33
+ command :opened_in_the_web do |c|
34
+
35
+ c.desc 'Site: auto | github'
36
+ c.default_value 'auto'
37
+ c.flag :site
38
+
39
+ c.action do |global_options,options,args|
40
+ GitIt::Controller.new(global_options).open_in_the_web(args, options)
41
+ end
42
+ end
43
+
44
+
45
+
46
+ # ====================
47
+ # = Before and After =
48
+ # ====================
49
+
50
+ pre do |global,command,options,args|
51
+ # Pre logic here
52
+ # Return true to proceed; false to abort and not call the
53
+ # chosen command
54
+ # Use skips_pre before a command to skip this block
55
+ # on that command only
56
+ true
57
+ end
58
+
59
+ post do |global,command,options,args|
60
+ # Post logic here
61
+ # Use skips_post before a command to skip this
62
+ # block on that command only
63
+ end
64
+
65
+ on_error do |exception|
66
+ # Error logic here
67
+ # return false to skip default error handling
68
+ true
69
+ end
70
+
71
+ exit run(ARGV)
data/git-it.rdoc ADDED
@@ -0,0 +1 @@
1
+ = git-it
@@ -0,0 +1,88 @@
1
+ require 'rugged'
2
+ # require 'debugger'
3
+
4
+ # Grand central station for git it commands
5
+ class GitIt::Controller
6
+
7
+ attr_reader :repository
8
+ attr_reader :git_object
9
+
10
+ # Options::
11
+ # * --sha=sha1 - git object reference to work on
12
+ def initialize(options)
13
+ @repository = Rugged::Repository.new( discover_repository )
14
+ @git_object = get_object(options[:sha])
15
+ end
16
+
17
+ # ===========
18
+ # = Actions =
19
+ # ===========
20
+
21
+ # Command:: git it opened_in_the_web
22
+ def open_in_the_web(args, options)
23
+ remote_origin_url = repository.config["remote.origin.url"]
24
+ # => git@github.com:more-ron/git-it.git
25
+
26
+ github_link = remote_origin_url.gsub("git@github.com:", "https://github.com/")
27
+ # => https://github.com/more-ron/git-it.git
28
+
29
+ branch_name = closest_remote_branch.target.gsub("refs/remotes/origin/", "")
30
+ # refs/remotes/origin/master => master
31
+
32
+ github_link = github_link.gsub(".git", "/tree/#{ branch_name }")
33
+ # => https://github.com/more-ron/git-it/tree/master
34
+
35
+ `open #{ github_link }` # should use launchy in the future
36
+ end
37
+
38
+ # ============
39
+ # = Privates =
40
+ # ============
41
+
42
+ private
43
+
44
+ def get_object(sha)
45
+ if sha == "{{current_head}}"
46
+ repository.lookup( repository.head.target )
47
+ else
48
+ repository.lookup( sha )
49
+ end
50
+ end
51
+
52
+ def discover_repository
53
+ Rugged::Repository.discover( Dir.pwd )
54
+ end
55
+
56
+ def remote_branches
57
+ @remote_branches ||= Rugged::Branch.each_name(repository, :remote).sort.collect do |branch_name|
58
+ Rugged::Branch.lookup(@repository, branch_name, :remote)
59
+ end
60
+ end
61
+
62
+ def local_branches
63
+ @local_branches ||= Rugged::Branch.each_name(repository, :local).sort.collect do |branch_name|
64
+ Rugged::Branch.lookup(@repository, branch_name)
65
+ end
66
+ end
67
+
68
+ def closest_remote_branch
69
+ remote_branches.min_by do |branch|
70
+ distance_in_object(:from => branch.tip.oid, :to => @git_object.oid)
71
+ end
72
+ end
73
+
74
+ def distance_in_object(options = {})
75
+ normal_direction_value = _distance_in_object(options)
76
+ opposite_direction_value = _distance_in_object(:from => options[:to], :to => options[:from])
77
+
78
+ [normal_direction_value, opposite_direction_value].max
79
+ end
80
+
81
+ def _distance_in_object(options = {})
82
+ walker = Rugged::Walker.new(repository)
83
+ walker.push(options[:to])
84
+ walker.hide(options[:from])
85
+ walker.count
86
+ end
87
+
88
+ end
@@ -0,0 +1,8 @@
1
+ module GitIt::GlobalHelper
2
+
3
+ # Prints "I don't git-it. That command made no sense."
4
+ def i_dont_git_it
5
+ raise "I don't git-it. That command made no sense."
6
+ end
7
+
8
+ end
@@ -0,0 +1,3 @@
1
+ module GitIt
2
+ VERSION = '0.0.4'
3
+ end
data/lib/git-it.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'git-it/version.rb'
2
+ require 'git-it/global_helper.rb'
3
+ require 'git-it/controller.rb'
4
+
5
+ # Add requires for other files you add to your project here, so
6
+ # you just need to require this one file in your bin file
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-it
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - MoreRon
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: aruba
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: gli
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 2.5.4
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.5.4
78
+ - !ruby/object:Gem::Dependency
79
+ name: rugged
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.17.0.b7
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.17.0.b7
94
+ description:
95
+ email: more.ron.too@gmail.com
96
+ executables:
97
+ - git-it
98
+ extensions: []
99
+ extra_rdoc_files:
100
+ - README.rdoc
101
+ - git-it.rdoc
102
+ files:
103
+ - bin/git-it
104
+ - lib/git-it/controller.rb
105
+ - lib/git-it/global_helper.rb
106
+ - lib/git-it/version.rb
107
+ - lib/git-it.rb
108
+ - README.rdoc
109
+ - git-it.rdoc
110
+ homepage: http://more-ron.github.com/git-it/
111
+ licenses: []
112
+ post_install_message:
113
+ rdoc_options:
114
+ - --title
115
+ - git-it
116
+ - --main
117
+ - README.rdoc
118
+ - -ri
119
+ require_paths:
120
+ - lib
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubyforge_project:
136
+ rubygems_version: 1.8.25
137
+ signing_key:
138
+ specification_version: 3
139
+ summary: Commands to help you git it.
140
+ test_files: []