git-pairing 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MzAxNDUxZTQ2OTlhOGMzNGFiMWVjMDg0NWE4NTE4YTBjYzU1MWMxOQ==
5
+ data.tar.gz: !binary |-
6
+ NWE2MmEwNmZiNjJjZGFjMjFmODY3YTg3YzZjM2NmNjBmZGNiNjdhYQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZTQyYzhmMzI1NWQ2YWIyM2VlMDlhNThkZGEwNGNiZDViMTFiMjlkZGU2YzQ0
10
+ MzgzNDVlZjk1N2VlZDAxMGEzOGUyM2NjMTRlMDY0YTEwNTQyNDk2YzJkMjE5
11
+ ZDcwOTI4MjZmN2YyZDVlNzM5NTEwY2M1ZGUwN2ZmYjg2MTllMzA=
12
+ data.tar.gz: !binary |-
13
+ ZTRjNmY3NDM5MGU4ZjEwZDM5NjYwM2JiZWQxMGJlNTg4MDIyMWM5ZjY1NjJm
14
+ MjI5YzkzNDljOGQzYmYxNzhkYTA1NGU2MmYwMDY5ZDM1YzQzMjVjOTBjYWNl
15
+ Mjk1M2Y5MjQ4NzllYzM4ZDg2YWRlMTRiNTFhY2I2YzQwZWY0OTE=
data/bin/git-pair ADDED
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ =begin
4
+ # 1.9 adds realpath to resolve symlinks; 1.8 doesn't
5
+ # have this method, so we add it so we get resolved symlinks
6
+ # and compatibility
7
+ unless File.respond_to? :realpath
8
+ class File #:nodoc:
9
+ def self.realpath path
10
+ return realpath(File.readlink(path)) if symlink?(path)
11
+ path
12
+ end
13
+ end
14
+ end
15
+
16
+ $: << File.expand_path(File.dirname(File.realpath(__FILE__)) + '/../lib')
17
+ #$: << File.expand_path(File.dirname(__FILE__) + './../lib')
18
+ =end
19
+
20
+ require 'gli'
21
+ require 'git-pair'
22
+
23
+ include GLI::App
24
+
25
+ program_desc 'Keeps track of co-authors of git commits'
26
+ preserve_argv
27
+ wrap_help_text :verbatim
28
+
29
+ # config file is put into the user's home directory
30
+ CFG_FILE = File.join(File.expand_path(ENV['HOME']),'.pairs')
31
+
32
+ pre do |global,command,options,args|
33
+ # Pre logic here
34
+ # Return true to proceed; false to abort and not call the chosen command
35
+ # Use skips_pre before a command to skip this block
36
+ # on that command only
37
+
38
+ # Create config if it doesn't already exist
39
+ unless File.exists?(CFG_FILE)
40
+ name = `git config --global --get user.name`
41
+ initials = ""
42
+ name.strip.downcase.split(/ /).each { |n| initials << n.split(//)[0] }
43
+ email = `git config --get user.email`
44
+ username = email.split("@")[0]
45
+ $pairs_conf = YAML::Store.new(CFG_FILE)
46
+ $pairs_conf.transaction do
47
+ $pairs_conf["pairs"] = {"#{initials}" => {'name'=>"#{name.strip}", 'username'=>"#{username}", 'email'=>"#{email.strip}"} }
48
+ #puts "in conf create"
49
+ #ap $pairs_conf
50
+ end
51
+ end
52
+
53
+ # Load .pairs config
54
+ if (File.exist?(CFG_FILE))
55
+ $pairs_conf = YAML::load(File.open(CFG_FILE, 'r'))
56
+ #puts "in conf load"
57
+ #ap $pairs_conf
58
+ else
59
+ exit_now!("No ~/.pairs config file found")
60
+ end
61
+
62
+ true
63
+ end
64
+
65
+ post do |global,command,options,args|
66
+ # Post logic here
67
+ # Use skips_post before a command to skip this
68
+ # block on that command only
69
+ end
70
+
71
+ on_error do |exception|
72
+ # Error logic here
73
+ # return false to skip default error handling
74
+ true
75
+ end
76
+
77
+ # put command rb files into ./lib/commands/
78
+ commands_from './../lib/commands'
79
+
80
+ exit run(ARGV)
@@ -0,0 +1,20 @@
1
+ desc 'adds new pairing partners: $git pair add <user-initials-1> [<user-initials-2> ...]'
2
+ command :add do |c|
3
+ c.action do |global_options,options,args|
4
+ partners = ""
5
+ if args.empty?
6
+ list = ask("Please enter a space separated list of partner initials to configure")
7
+ partners = list.strip.split(/ /)
8
+ else
9
+ partners = args
10
+ end
11
+ partners.uniq.each do |partner|
12
+ unless GitPairs::Pairs.exists?(partner)
13
+ GitPairs::Pairs.add(partner)
14
+ else
15
+ puts "Pairing Partner '#{partner}' already exists"
16
+ puts"To replace '#{partner}', first execute: git pair rm #{partner}"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ desc 'removes one or more pairing partners: $git pair rm <user-initials-1> [<user-initials-2> ...]'
2
+ command :rm do |c|
3
+ c.action do |global_options,options,args|
4
+ unless args.empty?
5
+ args.uniq.each do |partner|
6
+ unless GitPairs::Pairs.exists?(partner)
7
+ puts"There is no pairing partner configured for: #{partner}"
8
+ else
9
+ GitPairs::Pairs.delete(partner)
10
+ end
11
+ end
12
+ else
13
+ exit_now!("Wrong Number of Arguments - please provide at least one partner to remove")
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,64 @@
1
+ desc 'switches pairing partners: $git pair set <user-initials-1> [<user-initials-2> ...]'
2
+ command :set do |c|
3
+ c.action do |global_options,options,args|
4
+ # Check if we are in a git repo
5
+ unless system 'git status > /dev/null 2>/dev/null'
6
+ puts"Not in a git repo"
7
+ else
8
+ #puts "in set"
9
+ unless !args.empty?
10
+ exit_now!("Wrong Number of Arguments - please provide pairing partners")
11
+ else
12
+ #puts "args not empty"
13
+ #add pair to conf
14
+ authors = []
15
+ solo_author = ""
16
+ solo_email = ""
17
+ solo_initials = ""
18
+ size = args.uniq.size
19
+ args.uniq.each do |partner|
20
+ unless GitPairs::Pairs.exists?(partner)
21
+ GitPairs::Pairs.add(partner)
22
+ end
23
+ #puts "in concat"
24
+ if size > 1
25
+ #concatenate each partner's username into git config "author"
26
+ @author = GitPairs::Pairs.fetch(partner)["username"]
27
+ authors << ["#{@author}","#{partner}"]
28
+ else # exactly one author provided
29
+ solo = GitPairs::Pairs.fetch(partner)
30
+ solo_author = solo["name"]
31
+ solo_email = solo["email"]
32
+ solo_initials = partner
33
+ end
34
+ end
35
+ unless authors.empty?
36
+ authors.sort!
37
+ #puts"authors: #{authors}"
38
+ sorted_authors = ""
39
+ sorted_initials = ""
40
+ authors.each do |a|
41
+ sorted_authors << a[0]
42
+ sorted_initials << a[1]
43
+ if size > 1 && authors.index(a) < size-1
44
+ sorted_authors << " "
45
+ sorted_initials << " "
46
+ end
47
+ end
48
+ #puts"sorted authors: #{sorted_authors}"
49
+ cmd_git = `git config user.name "#{sorted_authors}"`
50
+ cmd_git = `git config user.initials "#{sorted_initials}"`
51
+ #puts"cmdout: " + cmd_git
52
+ else
53
+ #puts"in else"
54
+ #puts"git config user.name #{solo_author}"
55
+ #puts"git config user.email #{solo_email}"
56
+ `git config user.name "#{solo_author}"`
57
+ `git config user.email "#{solo_email}"`
58
+ `git config user.initials "#{solo_initials}"`
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+
@@ -0,0 +1,27 @@
1
+ desc 'displays currently set pairing partners: $git pair show [-a | --all]'
2
+ command :show do |c|
3
+ c.desc 'list all available configured partners'
4
+ c.default_value false
5
+ c.switch :all, :a
6
+
7
+ c.action do |global_options,options,args|
8
+ # Check if we are in a git repo
9
+ unless system 'git status > /dev/null 2>/dev/null'
10
+ puts"Not in a git repo"
11
+ else
12
+ user = `git config --get user.name`.strip
13
+ email = `git config --get user.email`.strip
14
+ puts " "
15
+ puts "Git Config >"
16
+ puts "Name: #{user}"
17
+ puts "Email: #{email}"
18
+ end
19
+ # display list of configured partners
20
+ if options[:all]
21
+ puts " "
22
+ puts "Pairs Config >"
23
+ ap $pairs_conf
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,10 @@
1
+ desc 'resets git author to single global user: $git pair solo'
2
+ command :solo do |c|
3
+ c.action do |global_options,options,args|
4
+ `git config --unset-all user.name`
5
+ `git config --unset-all user.email`
6
+ `git config --unset-all user.initials`
7
+ `git config --remove-section user`
8
+ end
9
+ end
10
+
data/lib/git-pair.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'awesome_print'
2
+ require 'yaml/store'
3
+ require 'pairs.rb'
4
+ require 'highline/import'
5
+
6
+ # Add requires for other files you add to your project here, so
7
+ # you just need to require this one file in your bin file
data/lib/pairs.rb ADDED
@@ -0,0 +1,55 @@
1
+ module GitPairs
2
+ class Pairs
3
+ # Functions for manipulating the .pairs config file
4
+ def self.add(initials)
5
+ #if $pairs_conf["pairs"].include?(initials)
6
+ if self.exists?(initials)
7
+ puts"Pairing Partner '#{initials}' already exists"
8
+ else
9
+ #puts "In Add"
10
+ #ap $pairs_conf
11
+ unless GitPairs::Pairs.exists?(initials)
12
+ puts"Please provide info for: #{initials}"
13
+ name = ask("Full Name: ")
14
+ user = ask("Git Username: ")
15
+ #just in case they supply email address
16
+ user = user.split('@')[0]
17
+ email = ask("Email: ")
18
+ partner = {initials => {'name' => name, 'username' => user, 'email' => email}}
19
+ $pairs_conf["pairs"].update(partner)
20
+ temp_conf = YAML::Store.new(CFG_FILE)
21
+ temp_conf.transaction do
22
+ temp_conf["pairs"] = $pairs_conf["pairs"]
23
+ end
24
+ puts"Added '#{initials}' to list of available pairs"
25
+ end
26
+ end
27
+ end
28
+
29
+ def self.exists?(initials)
30
+ #puts "in exists?"
31
+ #ap $pairs_conf
32
+ #puts$pairs_conf["pairs"].include?(initials)
33
+ return $pairs_conf["pairs"].include?(initials)
34
+ end
35
+
36
+ def self.fetch(initials)
37
+ return $pairs_conf["pairs"][initials]
38
+ end
39
+
40
+ def self.delete(initials)
41
+ #puts "in delete"
42
+ #puts"before:"
43
+ #ap $pairs_conf
44
+ if $pairs_conf["pairs"].include?(initials)
45
+ $pairs_conf["pairs"].delete(initials)
46
+ temp_conf = YAML::Store.new(CFG_FILE)
47
+ temp_conf.transaction do
48
+ temp_conf["pairs"] = $pairs_conf["pairs"]
49
+ end
50
+ end
51
+ #puts"after:"
52
+ #ap $pairs_conf
53
+ end
54
+ end
55
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-pairing
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Steve Quince
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: awesome_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: highline
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: gli
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.5.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.5.4
69
+ description: Keeps track of co-authors of git commits
70
+ email: steve.quince@gmail.com
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - bin/git-pair
76
+ - lib/commands/add.rb
77
+ - lib/commands/rm.rb
78
+ - lib/commands/set.rb
79
+ - lib/commands/show.rb
80
+ - lib/commands/solo.rb
81
+ - lib/git-pair.rb
82
+ - lib/pairs.rb
83
+ homepage: https://github.com/squince/git-pairing
84
+ licenses: []
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.0.2
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Configures git to attribute code commits to multiple authors.
107
+ test_files: []