gitswitch 0.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/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Joe Alba
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.rdoc ADDED
@@ -0,0 +1,34 @@
1
+ = gitswitch
2
+
3
+ Easily switch your current git user info. Handy for work and personal repositories. Also might come in handy for switching between users while pair programming.
4
+
5
+ == Install
6
+
7
+ gem install gitswitch
8
+
9
+ == Usage
10
+
11
+ Simply run the script to establish a default ~/.gitswitch file using the git info you already have in your ~/.gitconfig file
12
+ gitswitch
13
+
14
+ Add a new git user tag
15
+ gitswitch -a
16
+
17
+ Set specific user info to your current git repository
18
+ gitswitch -r work
19
+ gitswitch -r # Sets your 'default' tag if you don't specify a tag
20
+
21
+ List all the gitswitch user tags/info you have stored
22
+ gitswitch -l
23
+
24
+ Current git user options --
25
+ default:
26
+ Name: Joe Alba
27
+ E-mail: joe@home.com
28
+ work:
29
+ Name: Joe Alba
30
+ E-mail: jalba@work.com
31
+
32
+ == Copyright
33
+
34
+ Copyright (c) 2010 Joe Alba. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "gitswitch"
8
+ gem.summary = %Q{Easy git user switching}
9
+ gem.description = %Q{Do you write code for your employer and for yourself? Want to easily change the e-mail address associated with your commits for work and home repos? This gem might help you out.}
10
+ gem.email = "joe@joealba.com"
11
+ gem.homepage = "http://github.com/joealba/gitswitch"
12
+ gem.authors = ["Joe Alba"]
13
+ gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
19
+ end
20
+
21
+ require 'rake/testtask'
22
+ Rake::TestTask.new(:test) do |test|
23
+ test.libs << 'lib' << 'test'
24
+ test.pattern = 'test/**/test_*.rb'
25
+ test.verbose = true
26
+ end
27
+
28
+ begin
29
+ require 'rcov/rcovtask'
30
+ Rcov::RcovTask.new do |test|
31
+ test.libs << 'test'
32
+ test.pattern = 'test/**/test_*.rb'
33
+ test.verbose = true
34
+ end
35
+ rescue LoadError
36
+ task :rcov do
37
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
38
+ end
39
+ end
40
+
41
+ task :test => :check_dependencies
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "gitswitch #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/bin/gitswitch ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "gitswitch"
4
+ GitSwitch.run ARGV
data/lib/gitswitch.rb ADDED
@@ -0,0 +1,212 @@
1
+ require "optparse"
2
+ require "yaml"
3
+
4
+ class GitSwitch
5
+ VERSION_FILE = File.join File.dirname(__FILE__), "..", "VERSION.yml"
6
+ GITSWITCH_CONFIG_FILE = File.join ENV["HOME"], ".gitswitch"
7
+ GIT_BIN = '/usr/bin/env git'
8
+
9
+
10
+ def self.run args = ARGV
11
+ gitswitch = GitSwitch.new
12
+ gitswitch.parse_args args
13
+ end
14
+
15
+
16
+ def initialize
17
+ @users = {}
18
+ if File.exists? GITSWITCH_CONFIG_FILE
19
+ @users = YAML::load_file GITSWITCH_CONFIG_FILE
20
+ raise "Error loading .gitswitch file" if @users.nil?
21
+ else
22
+ print "Gitswitch users file ~/.gitswitch not found. Would you like to create one? (y/n): "
23
+ if gets.chomp =~ /^y/i
24
+ create_gitswitch_file
25
+ else
26
+ puts "Ok, that's fine. Exiting." and exit
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+
33
+ # Read and parse the supplied command line arguments.
34
+ def parse_args args = ARGV
35
+ args = ["-h"] if args.empty?
36
+
37
+ parser = OptionParser.new do |o|
38
+ o.banner = "Usage: gitswitch [options]"
39
+
40
+ o.on "-l", "--list", "Show all git users you have configured" do
41
+ list_users and exit
42
+ end
43
+
44
+ o.on "-i", "--info", "Show the current git user info." do
45
+ print_info and exit
46
+ end
47
+
48
+ o.on "-s", "--switch [TAG]", String, "Switch git user to the specified tag" do |tag|
49
+ tag ||= 'default'
50
+ switch_user tag
51
+ print_info
52
+ exit
53
+ end
54
+
55
+ o.on "-r", "--repo [TAG]", String, "Switch git user to the specified tag for the current directory's git repository" do |tag|
56
+ tag ||= 'default'
57
+ switch_repo_user tag
58
+ exit
59
+ end
60
+
61
+ o.on "-h", "--help", "Show this help message." do
62
+ print_info
63
+ puts parser and exit
64
+ end
65
+
66
+ o.on "-o", "--overwrite", "Overwrite/create a .gitswitch file using your current git user info as default" do
67
+ create_gitswitch_file
68
+ print_info and exit
69
+ end
70
+
71
+ o.on "-a", "--add", "Add a new gitswitch entry" do
72
+ add_gitswitch_entry and exit
73
+ end
74
+
75
+ o.on("-v", "--version", "Show the current version.") do
76
+ print_version and exit
77
+ end
78
+ end
79
+
80
+
81
+ begin
82
+ parser.parse! args
83
+ rescue OptionParser::InvalidOption => error
84
+ puts error.message.capitalize
85
+ rescue OptionParser::MissingArgument => error
86
+ puts error.message.capitalize
87
+ end
88
+ end
89
+
90
+
91
+
92
+ # Create a .gitswitch file with the current user defaults
93
+ def create_gitswitch_file
94
+ current_git_user = get_current_git_user
95
+ if current_git_user[:name].empty? && current_git_user[:email].empty?
96
+ puts "ERROR: You must set up a default git user.name and user.email first."
97
+ else
98
+ puts "Adding your current git user info to the \"default\" tag..."
99
+ set_gitswitch_entry('default', current_git_user[:email], current_git_user[:name])
100
+ save_gitswitch_file
101
+ end
102
+ end
103
+
104
+
105
+ def save_gitswitch_file
106
+ if fh = File.open(GITSWITCH_CONFIG_FILE, 'w')
107
+ fh.write(@users.to_yaml)
108
+ fh.close
109
+ else
110
+ puts "ERROR: Could not open/write the gitswitch config file: #{GITSWITCH_CONFIG_FILE}"
111
+ end
112
+ end
113
+
114
+
115
+ # Set git user parameters for a tag
116
+ # ==== Parameters
117
+ # * +tag+ - Required. The tag you want to add to your .gitswitch file
118
+ # * +email+ - Required
119
+ # * +name+ - Required
120
+ def set_gitswitch_entry(tag, email, name)
121
+ @users[tag] = {:name => name, :email => email}
122
+ save_gitswitch_file
123
+ end
124
+
125
+
126
+ # Switch git user in your global .gitconfig file
127
+ # ==== Parameters
128
+ # * +tag+ - The tag associated with your desired git info in .gitswitch. Defaults to "default".
129
+ def switch_global_user tag = "default"
130
+ puts "Switching git user to \"#{tag}\" tag..."
131
+ if !@users[tag].empty? && !@users[tag][:email].to_s.empty?
132
+ %x(#{GIT_BIN} config --replace-all --global user.name '#{@users[tag][:name]}') if !@users[tag][:name].to_s.empty?
133
+ %x(#{GIT_BIN} config --replace-all --global user.email '#{@users[tag][:email]}')
134
+ else
135
+ puts "ERROR: Could not find info for tag #{tag} in your .gitswitch file"
136
+ end
137
+ end
138
+
139
+
140
+ # Set the git user information for current repository
141
+ # ==== Parameters
142
+ # * +tag+ - The tag associated with your desired git info in .gitswitch. Defaults to "default".
143
+ def switch_repo_user tag = "default"
144
+ puts "Switching git user to \"#{tag}\" tag..."
145
+ if !@users[tag].empty? && !@users[tag][:email].to_s.empty?
146
+ %x(#{GIT_BIN} config --replace-all user.name '#{@users[tag][:name]}') if !@users[tag][:name].to_s.empty?
147
+ %x(#{GIT_BIN} config --replace-all user.email '#{@users[tag][:email]}')
148
+ else
149
+ puts "ERROR: Could not find info for tag #{tag} in your .gitswitch file"
150
+ end
151
+ end
152
+
153
+
154
+ # Add a user entry to your .gitswitch file
155
+ def add_gitswitch_entry
156
+ print "What tag would you like to set to this git user? "
157
+ tag = gets.chomp
158
+
159
+ print "E-mail address: "
160
+ email = gets.chomp
161
+
162
+ print "Name: (ENTER to use \"" + get_current_git_user()[:name] + "\") "
163
+ name = gets.chomp
164
+ if name.empty?
165
+ name = get_current_git_user()[:name]
166
+ end
167
+ set_gitswitch_entry(tag, email, name)
168
+ end
169
+
170
+
171
+ def list_users
172
+ puts "\nCurrent git user options --"
173
+ @users.each do |key, user|
174
+ puts "#{key}:"
175
+ puts " Name: #{user[:name]}" if !user[:name].to_s.empty?
176
+ puts " E-mail: #{user[:email]}\n"
177
+ end
178
+ end
179
+
180
+
181
+ # Print active account information.
182
+ def print_info
183
+ current_git_user = get_current_git_user
184
+ puts "Current git user information:\n"
185
+ puts "Name: #{current_git_user[:name]}"
186
+ puts "E-mail: #{current_git_user[:email]}"
187
+ puts
188
+ end
189
+
190
+
191
+ # Print version information.
192
+ def print_version
193
+ if fh = File.open('VERSION','r')
194
+ puts "GitSwitch " + fh.gets
195
+ fh.close
196
+ else
197
+ puts "Version information not found"
198
+ end
199
+ end
200
+
201
+
202
+ private
203
+
204
+ # Show the current git user info
205
+ def get_current_git_user
206
+ user = {
207
+ :name => %x(#{GIT_BIN} config --get user.name).to_s.chomp,
208
+ :email => %x(#{GIT_BIN} config --get user.email).to_s.chomp
209
+ }
210
+ end
211
+
212
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'gitswitch'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class TestGitswitch < Test::Unit::TestCase
4
+
5
+ # should "probably rename this file and start testing for real" do
6
+ # flunk "hey buddy, you should probably rename this file and start testing for real"
7
+ # end
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitswitch
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Joe Alba
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-04 00:00:00 -04:00
19
+ default_executable: gitswitch
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: thoughtbot-shoulda
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ description: Do you write code for your employer and for yourself? Want to easily change the e-mail address associated with your commits for work and home repos? This gem might help you out.
36
+ email: joe@joealba.com
37
+ executables:
38
+ - gitswitch
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - LICENSE
43
+ - README.rdoc
44
+ files:
45
+ - .document
46
+ - .gitignore
47
+ - LICENSE
48
+ - README.rdoc
49
+ - Rakefile
50
+ - VERSION
51
+ - lib/gitswitch.rb
52
+ - test/helper.rb
53
+ - test/test_gitswitch.rb
54
+ - bin/gitswitch
55
+ has_rdoc: true
56
+ homepage: http://github.com/joealba/gitswitch
57
+ licenses: []
58
+
59
+ post_install_message:
60
+ rdoc_options:
61
+ - --charset=UTF-8
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ requirements: []
83
+
84
+ rubyforge_project:
85
+ rubygems_version: 1.3.7
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: Easy git user switching
89
+ test_files:
90
+ - test/helper.rb
91
+ - test/test_gitswitch.rb