pivotal_git_scripts 1.1.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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/MIT.LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Pivotal Labs
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # Git Scripts
2
+
3
+ These scripts are helpers for managing developer workflow when using git repos hosted on GitHub. Install as a rubygem and they can be run as standard git commands like `git about`.
4
+
5
+ ## Installation
6
+
7
+ $ gem install pivotal_git_scripts
8
+
9
+ ## git-about
10
+
11
+ `git about` shows settings set by `git pair` and `git project`
12
+
13
+ ## git-pair
14
+
15
+ $ git pair js sp
16
+ user.name=Josh Susser & Sam Pierson
17
+ user.email=pair+jsusser+sam@pivotallabs.com
18
+
19
+
20
+ Use `git pair` to set the git config user info that sets the commit user metadata. You'll need to create a `.pairs` config file to map initials to names and email ids. The example file:
21
+
22
+ # .pairs - configuration for 'git pair'
23
+ # place in project or home directory
24
+ pairs:
25
+ eh: Edward Hieatt
26
+ js: Josh Susser; jsusser
27
+ sf: Serguei Filimonov; serguei
28
+ email:
29
+ prefix: pair
30
+ domain: pivotallabs.com
31
+
32
+ You can put the .pairs file in your project repo root directory and check it into git, or you can put it in your ~ directory so it's available to all projects on the workstation.
33
+
34
+ By default this command affects the configuration in the current project (.git/config). Use the `--global` option to set the global git configuration for all projects (~/.gitconfig).
35
+
36
+ ## git-project
37
+
38
+ $ git project pivots
39
+
40
+ This script sets the user account you will use to access repos hosted on github.com. It creates a symlink from `id_github_current` to `id_github_pivotal<project>`, which switches the SSH key you are currently using to access GitHub repos. Make sure you have the following lines in your .ssh/config file:
41
+
42
+ Host github.com
43
+ User git
44
+ IdentityFile /Users/pivotal/.ssh/id_github_current
45
+
46
+ Copyright (c) 2010 Pivotal Labs. This software is licensed under the MIT License.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/git-about ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ config = `git config -l`
4
+ user_name = `git config --get user.name`
5
+ user_name = "NONE" if user_name.length == 0
6
+ user_email = `git config --get user.email`
7
+ user_email = "NONE" if user_email.length == 0
8
+
9
+ begin
10
+ keyfile = File.readlink(File.expand_path("~/.ssh/id_github_current"))
11
+ project = keyfile =~ %r{id_github_(\w+)} ? $1 : "NONE"
12
+ rescue Errno::ENOENT
13
+ project = "NONE"
14
+ end
15
+
16
+ puts "git user: #{user_name}"
17
+ puts "git email: #{user_email}"
18
+ puts "GitHub project: #{project}"
data/bin/git-pair ADDED
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Configures the git author to a list of developers when pair programming,
4
+ # alphabetized on first name
5
+ #
6
+ # Usage: git pair ls gw (Sets the repo specific author to 'Greg Woodward & Loren Siebert')
7
+ # git pair (Unsets the repo specific author so the git global config takes effect)
8
+ # git pair --global ls gw (Sets the global author to 'Greg Woodward & Loren Siebert')
9
+ # git pair --global (Unsets the global author)
10
+ #
11
+ # Orginal Author: Bryan Helmkamp (http://brynary.com)
12
+
13
+ #######################################################################
14
+
15
+ require 'yaml'
16
+
17
+ unless File.exists?(".git")
18
+ puts "This doesn't look like a git repository."
19
+ exit 1
20
+ end
21
+
22
+ ## Configuration
23
+
24
+ def get_pairs_config
25
+ pairs_file_path = nil
26
+ candidate_file_path = '.pairs'
27
+ until pairs_file_path || File.expand_path(candidate_file_path) == '/.pairs' do
28
+ if File.exists?(candidate_file_path)
29
+ pairs_file_path = candidate_file_path
30
+ else
31
+ candidate_file_path = File.join("..", candidate_file_path)
32
+ end
33
+ end
34
+ unless pairs_file_path
35
+ puts <<-INSTRUCTIONS
36
+ Could not find a .pairs file. Create a YAML file in your project or home directory.
37
+ Format: <initials>: <name>[; <email>]
38
+ Example:
39
+ # .pairs - configuration for 'git pair'
40
+ # place in project or home directory
41
+ pairs:
42
+ eh: Edward Hieatt
43
+ js: Josh Susser; jsusser
44
+ sf: Serguei Filimonov; serguei
45
+ email:
46
+ prefix: pair
47
+ domain: pivotallabs.com
48
+ INSTRUCTIONS
49
+ exit(1)
50
+ end
51
+ pairs_file_path ? YAML.load_file(pairs_file_path) : {}
52
+ end
53
+
54
+ ## End of configuration
55
+ #######################################################################
56
+
57
+ global_config_string = ARGV.delete("--global").to_s
58
+ config = get_pairs_config
59
+ authors = ARGV.map do |initials|
60
+ if full_name = config['pairs'][initials.downcase]
61
+ full_name
62
+ else
63
+ puts "Couldn't find author name for initials: #{initials}. Add this person to the .pairs file in your project or home directory."
64
+ exit 1
65
+ end
66
+ end
67
+
68
+ if authors.any?
69
+ authors.sort!.uniq!
70
+ names, emails = authors.collect do |a|
71
+ both = a.split(";").collect {|s| s.strip}
72
+ both << both[0].split(' ').first.downcase if both.length == 1 # default email to first name
73
+ both
74
+ end.transpose
75
+
76
+ case authors.size
77
+ when 1
78
+ authors = names.first
79
+ when 2
80
+ authors = names.join(" & ")
81
+ else
82
+ authors = names[0..-2].join(", ") + " & " + names.last
83
+ end
84
+ email =
85
+ if email_prefix = config['email']['prefix']
86
+ "#{([email_prefix] + emails).join('+')}@#{config['email']['domain']}"
87
+ else
88
+ config['email']
89
+ end
90
+ system(%Q{git config #{global_config_string} user.name "#{authors}"})
91
+ system(%Q{git config #{global_config_string} user.email "#{email}"})
92
+ else
93
+ system("git config #{global_config_string} --unset user.name")
94
+ system("git config #{global_config_string} --unset user.email")
95
+ puts "Unset #{global_config_string} user.name and user.email"
96
+ end
97
+
98
+ global_name_setting = `git config --global --get-regexp '^user\.name'`
99
+ local_name_setting = `git config -f .git/config --get-regexp '^user\.name'`
100
+ if global_name_setting.length > 0 && local_name_setting.length > 0
101
+ puts "NOTE: Overriding global user.name setting with local."
102
+ end
103
+ puts "global: #{global_name_setting}" if global_name_setting.length > 0
104
+ puts "local: #{local_name_setting}" if local_name_setting.length > 0
105
+
106
+
107
+ global_email_setting = `git config --global --get-regexp '^user\.email'`
108
+ local_email_setting = `git config -f .git/config --get-regexp '^user\.email'`
109
+ if global_email_setting.length > 0 && local_email_setting.length > 0
110
+ puts "NOTE: Overriding global user.email setting with local."
111
+ end
112
+ puts "global: #{global_email_setting}" if global_email_setting.length > 0
113
+ puts "local: #{local_email_setting}" if local_email_setting.length > 0
data/bin/git-project ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ require 'socket'
3
+
4
+ def check_ssh_config
5
+ if `grep -c id_github_current config`.to_i == 0
6
+ puts <<-WARNING
7
+ You must edit your .ssh/config file to include:
8
+ Host github.com
9
+ User git
10
+ IdentityFile /Users/pivotal/.ssh/id_github_current
11
+ WARNING
12
+ end
13
+ end
14
+
15
+ project = ARGV[0] || Dir.pwd.split('/').last
16
+ hostname = Socket.gethostname.split('.').first
17
+ possible_id_files = [
18
+ "id_#{hostname}_github_pivotal#{project}",
19
+ "id_github_pivotal#{project}",
20
+ "id_github_#{project}"
21
+ ]
22
+
23
+ Dir.chdir(File.expand_path('~/.ssh')) do
24
+ possible_id_files.each do |id_file|
25
+ if File.exists?(id_file)
26
+ `ln -sf #{id_file} id_github_current`
27
+ puts "Now using key #{id_file}"
28
+ check_ssh_config
29
+ exit 0
30
+ end
31
+ end
32
+ puts "Key not found. You must create a ssh key in ~/.ssh/ called " +
33
+ possible_id_files[0..-2].join(", ") +
34
+ " or #{possible_id_files[-1]}"
35
+ end
data/bin/git-superpull ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ git pull && git submodule init && git submodule update
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "pivotal_git_scripts"
5
+ s.version = "1.1.0"
6
+ s.date = Time.now.strftime('%Y-%m-%d')
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Pivotal Labs"]
9
+ s.email = ["gems@pivotallabs.com"]
10
+ s.homepage = "http://github.com/pivotal/git_scripts"
11
+ s.summary = %q{Developer git workflow convenience scripts}
12
+ s.description = %q{These scripts are helpers for managing developer workflow when using git repos hosted on GitHub.}
13
+ s.has_rdoc = false
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pivotal_git_scripts
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 0
10
+ version: 1.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Pivotal Labs
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-15 00:00:00 -08:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: These scripts are helpers for managing developer workflow when using git repos hosted on GitHub.
23
+ email:
24
+ - gems@pivotallabs.com
25
+ executables:
26
+ - git-about
27
+ - git-pair
28
+ - git-project
29
+ - git-superpull
30
+ extensions: []
31
+
32
+ extra_rdoc_files: []
33
+
34
+ files:
35
+ - .gitignore
36
+ - MIT.LICENSE
37
+ - README.md
38
+ - Rakefile
39
+ - bin/git-about
40
+ - bin/git-pair
41
+ - bin/git-project
42
+ - bin/git-superpull
43
+ - pivotal_git_scripts.gemspec
44
+ has_rdoc: true
45
+ homepage: http://github.com/pivotal/git_scripts
46
+ licenses: []
47
+
48
+ post_install_message:
49
+ rdoc_options: []
50
+
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ requirements: []
72
+
73
+ rubyforge_project:
74
+ rubygems_version: 1.3.7
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Developer git workflow convenience scripts
78
+ test_files: []
79
+