hubbard 0.0.6 → 0.0.7

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 CHANGED
@@ -19,4 +19,4 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
- /data
22
+ /data
data/Rakefile CHANGED
@@ -11,10 +11,9 @@ begin
11
11
  gem.homepage = "http://github.com/mfoemmel/hubbard"
12
12
  gem.authors = ["Matthew Foemmel"]
13
13
  gem.add_development_dependency "rspec", ">= 1.2.9"
14
- gem.files << Dir['commands/*.rb']
14
+ gem.files << Dir['commands/*.rb'] + Dir['lib/**/*.rb']
15
15
  gem.bindir = 'bin'
16
16
  gem.executables << 'hubbard'
17
- gem.require_path = ''
18
17
  end
19
18
  Jeweler::GemcutterTasks.new
20
19
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
data/bin/hubbard CHANGED
@@ -1,17 +1,28 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  require 'fileutils'
4
- require 'socket'
5
-
6
- PROJECT_REGEX='[a-zA-Z0-9\-]{1,32}'
7
- REPOSITORY_REGEX='[a-zA-Z0-9\-]{1,32}'
8
- USERNAME_REGEX='[a-zA-Z0-9\-]{1,32}'
9
-
10
- HUB_DATA = ENV['HUB_DATA'] || File.expand_path("~/.hubbard")
11
- HUB_HOST = ENV['HUB_HOST'] || Socket.gethostname
3
+ require 'optparse'
4
+ require 'yaml'
5
+
6
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
7
+ require 'hubbard'
8
+
9
+ defaults = { :format => :text }
10
+ options = {}
11
+ OptionParser.new do |opts|
12
+ formats = [:text, :yaml]
13
+ opts.on("--private", "Create project with visibility set to private") do |o|
14
+ options[:private] = o
15
+ end
16
+ opts.on("-f", "--format [FORMAT]", formats,
17
+ "Select format (#{formats.join(', ')})") do |o|
18
+ options[:format] = o
19
+ end
20
+ end.parse!
21
+ OPTIONS = defaults.merge(options)
22
+ OPTIONS.freeze
12
23
 
13
- FileUtils.mkdir_p(File.join(HUB_DATA, "projects"))
14
- FileUtils.mkdir_p(File.join(HUB_DATA, "accounts"))
24
+ FileUtils.mkdir_p(File.join(Hubbard::HUB_DATA, "projects"))
25
+ FileUtils.mkdir_p(File.join(Hubbard::HUB_DATA, "accounts"))
15
26
 
16
27
  def next_arg(msg)
17
28
  if ARGV.length < 1
@@ -29,21 +40,21 @@ def check_status(msg)
29
40
  end
30
41
 
31
42
  def validate_project_name(name)
32
- if name !~ /#{PROJECT_REGEX}/
43
+ if name !~ /#{Hubbard::PROJECT_REGEX}/
33
44
  $stderr.put "Project names can only contain letter, numbers, and hyphens"
34
45
  exit 1
35
46
  end
36
47
  end
37
48
 
38
49
  def validate_repository_name(name)
39
- if name !~ /#{REPOSITORY_REGEX}/
50
+ if name !~ /#{Hubbard::REPOSITORY_REGEX}/
40
51
  $stderr.put "Repository names can only contain letter, numbers, and hyphens"
41
52
  exit 1
42
53
  end
43
54
  end
44
55
 
45
56
  def validate_user_name(name)
46
- if name !~ /#{USERNAME_REGEX}/
57
+ if name !~ /#{Hubbard::USERNAME_REGEX}/
47
58
  $stderr.put "User names can only contain letter, numbers, and hyphens"
48
59
  exit 1
49
60
  end
@@ -116,11 +127,11 @@ def is_authorized(project_name, action)
116
127
  end
117
128
 
118
129
  def find_account_dir(user_name)
119
- File.join(HUB_DATA, "accounts", user_name)
130
+ File.join(Hubbard::HUB_DATA, "accounts", user_name)
120
131
  end
121
132
 
122
133
  def find_project_dir(project_name)
123
- File.join(HUB_DATA, "projects", project_name)
134
+ File.join(Hubbard::HUB_DATA, "projects", project_name)
124
135
  end
125
136
 
126
137
  def find_repository_dir(project_name, repository_dir)
@@ -147,13 +158,13 @@ end
147
158
 
148
159
  def sync_keys
149
160
  File.open(File.expand_path("~/.ssh/authorized_keys"), "w") do |file|
150
- Dir.entries(File.join(HUB_DATA, "accounts")).each do |account|
161
+ Dir.entries(File.join(Hubbard::HUB_DATA, "accounts")).each do |account|
151
162
  next if account == '.' || account == '..'
152
- key_dir = File.join(HUB_DATA, "accounts", account, "keys")
163
+ key_dir = File.join(Hubbard::HUB_DATA, "accounts", account, "keys")
153
164
  Dir.entries(key_dir).each do |name|
154
165
  next if name == '.' || name == '..'
155
166
  key = File.read(File.join(key_dir, name))
156
- file << "command=\"hubbard #{@username}\" #{key} #{name}\n"
167
+ file << %Q~command="hubbard #{account}",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty #{key} #{name}\n~
157
168
  end
158
169
  end
159
170
  end
@@ -9,6 +9,6 @@ end
9
9
  unless Dir.mkdir(dir)
10
10
  $stderr.puts "Unable to create directory: #{dir}"
11
11
  end
12
- visibility = ARGV.member?("--private") ? "private" : "public"
12
+ visibility = OPTIONS[:private] ? "private" : "public"
13
13
  File.open(File.join(dir, ".permissions"), "w") { |f| f << "#{@username}=admin\n" }
14
14
  File.open(File.join(dir, ".visibility"), "w") { |f| f << "#{visibility}\n" }
@@ -1,4 +1,4 @@
1
- unless ARGV.shift =~ /(#{PROJECT_REGEX})\/(#{REPOSITORY_REGEX}).git/
1
+ unless ARGV.shift =~ /(#{Hubbard::PROJECT_REGEX})\/(#{Hubbard::REPOSITORY_REGEX}).git/
2
2
  $stderr.puts "Repository not found"
3
3
  exit 1
4
4
  end
@@ -1,4 +1,4 @@
1
- unless ARGV.shift =~ /(#{PROJECT_REGEX})\/(#{REPOSITORY_REGEX}).git/
1
+ unless ARGV.shift =~ /(#{Hubbard::PROJECT_REGEX})\/(#{Hubbard::REPOSITORY_REGEX}).git/
2
2
  $stderr.puts "Repository not found"
3
3
  exit 1
4
4
  end
@@ -3,7 +3,7 @@ repository_name = read_repository_name
3
3
  authorize(project_name, 'read')
4
4
  forkid = Dir.chdir(find_repository_dir(project_name, repository_name)) { `git config --get hubbard.forkid` }
5
5
  project_dir = find_project_dir(project_name)
6
- Dir.foreach(File.join(HUB_DATA, 'projects')) do |dir|
6
+ Dir.foreach(File.join(Hubbard::HUB_DATA, 'projects')) do |dir|
7
7
  next if dir == "." || dir == ".."
8
8
  next unless is_authorized(dir, 'read')
9
9
  Dir.foreach(find_project_dir(project_name)) do |repository_name|
@@ -1,5 +1,12 @@
1
+ keys = []
1
2
  dirname = File.join(find_account_dir(@username), "keys")
2
3
  Dir.entries(dirname).each do |name|
3
4
  next if name == '.' || name == '..'
4
- puts name
5
+ keys << name
6
+ end
7
+
8
+ if OPTIONS[:format] == :yaml
9
+ puts YAML::dump(keys)
10
+ else
11
+ keys.each { |k| puts k }
5
12
  end
@@ -1,6 +1,13 @@
1
- Dir.foreach(File.join(HUB_DATA, 'projects')) do |dir|
1
+ projects = []
2
+ Dir.foreach(File.join(Hubbard::HUB_DATA, 'projects')) do |dir|
2
3
  next if dir == "." || dir == ".."
3
4
  if is_authorized(dir, 'read')
4
- puts dir
5
+ projects << dir
5
6
  end
6
7
  end
8
+
9
+ if OPTIONS[:format] == :yaml
10
+ puts YAML::dump(projects)
11
+ else
12
+ projects.each { |p| puts p }
13
+ end
@@ -1,7 +1,14 @@
1
1
  project_name = read_project_name
2
2
  authorize(project_name, 'read')
3
+ repositories = []
3
4
  Dir.foreach(find_project_dir(project_name)) do |repository_name|
4
5
  next if repository_name =~ /^\./
5
- git_url = "#{ENV['USER']}@#{HUB_HOST}:#{project_name}/#{repository_name}.git"
6
- puts "#{repository_name}\t#{git_url}"
6
+ git_url = "#{ENV['USER']}@#{Hubbard::HUB_HOST}:#{project_name}/#{repository_name}.git"
7
+ repositories << { :name => repository_name, :url => git_url }
8
+ end
9
+
10
+ if OPTIONS[:format] == :yaml
11
+ puts YAML::dump(repositories)
12
+ else
13
+ repositories.each { |r| puts "#{r[:name]}\t#{r[:url]}" }
7
14
  end
@@ -1,4 +1,11 @@
1
- Dir.entries(File.join(HUB_DATA, "accounts")).each do |entry|
1
+ users = []
2
+ Dir.entries(File.join(Hubbard::HUB_DATA, "accounts")).each do |entry|
2
3
  next if entry == '.' || entry == '..'
3
- puts entry
4
+ users << entry
5
+ end
6
+
7
+ if OPTIONS[:format] == :yaml
8
+ puts YAML::dump(users)
9
+ else
10
+ users.each { |u| puts u }
4
11
  end
data/lib/hubbard.rb CHANGED
@@ -0,0 +1,10 @@
1
+ require 'socket'
2
+
3
+ module Hubbard
4
+ PROJECT_REGEX='[a-zA-Z0-9\-]{1,32}'
5
+ REPOSITORY_REGEX='[a-zA-Z0-9\-]{1,32}'
6
+ USERNAME_REGEX='[a-zA-Z0-9\-]{1,32}'
7
+
8
+ HUB_DATA = ENV['HUB_DATA'] || File.expand_path("~/.hubbard")
9
+ HUB_HOST = ENV['HUB_HOST'] || Socket.gethostname
10
+ end
data/spec/hubbard_spec.rb CHANGED
@@ -1,44 +1,9 @@
1
- # Something in the Rakefile is generating
2
- # a bunch of GIT_* environment variables,
3
- # which mess everything up, so undo.
4
- ENV.each do |key,value|
5
- ENV[key] = nil if key =~ /^GIT_/
6
- end
7
-
8
- HUB=File.expand_path(File.join(File.dirname(__FILE__), "..", "bin", "hubbard"))
9
-
1
+ require 'spec_helper'
10
2
  require 'fileutils'
11
3
 
12
- ENV['HUB_USER'] = HUB_USER = "hub"
13
- ENV['HUB_HOST'] = HUB_HOST = "example.com"
14
- ENV['HUB_DATA'] = HUB_DATA = File.expand_path(File.join(File.dirname(__FILE__), '..', "data"))
15
- ENV['GIT_SSH'] = File.expand_path(File.join(File.dirname(__FILE__), "gitssh"))
16
-
17
- def hub(username, command, input=nil)
18
- if input
19
- result = `echo #{input} | #{HUB} #{username} #{command}`
20
- else
21
- result = `#{HUB} #{username} #{command}`
22
- end
23
- if $?.exitstatus != 0
24
- raise "Command failed: hub #{username} #{command}\n#{result}"
25
- end
26
- result
27
- end
28
-
29
- def git(username, command)
30
- ENV['HUB_USERNAME'] = username
31
- result = `git #{command}`
32
- if $?.exitstatus != 0
33
- raise "Command failed: git #{command}:\n#{result}"
34
- end
35
- result
36
- end
37
-
38
4
  describe "Hubble" do
39
5
  before(:each) do
40
- FileUtils.rm_rf HUB_DATA
41
- FileUtils.rm_rf "tmp"
6
+ reset_file_system
42
7
  end
43
8
 
44
9
  it "should create project" do
data/spec/spec_helper.rb CHANGED
@@ -5,5 +5,43 @@ require 'spec'
5
5
  require 'spec/autorun'
6
6
 
7
7
  Spec::Runner.configure do |config|
8
-
8
+ end
9
+
10
+ # Something in the Rakefile is generating
11
+ # a bunch of GIT_* environment variables,
12
+ # which mess everything up, so undo.
13
+ ENV.each do |key,value|
14
+ ENV[key] = nil if key =~ /^GIT_/
15
+ end
16
+
17
+ HUB=File.expand_path(File.join(File.dirname(__FILE__), "..", "bin", "hubbard"))
18
+ ENV['HUB_USER'] = HUB_USER = "hub"
19
+ ENV['HUB_HOST'] = HUB_HOST = "example.com"
20
+ ENV['HUB_DATA'] = HUB_DATA = File.expand_path(File.join(File.dirname(__FILE__), '..', "data"))
21
+ ENV['GIT_SSH'] = File.expand_path(File.join(File.dirname(__FILE__), "gitssh"))
22
+
23
+ def hub(username, command, input=nil)
24
+ if input
25
+ result = `echo #{input} | #{HUB} #{username} #{command}`
26
+ else
27
+ result = `#{HUB} #{username} #{command}`
28
+ end
29
+ if $?.exitstatus != 0
30
+ raise "Command failed: hub #{username} #{command}\n#{result}"
31
+ end
32
+ result
33
+ end
34
+
35
+ def git(username, command)
36
+ ENV['HUB_USERNAME'] = username
37
+ result = `git #{command}`
38
+ if $?.exitstatus != 0
39
+ raise "Command failed: git #{command}:\n#{result}"
40
+ end
41
+ result
42
+ end
43
+
44
+ def reset_file_system
45
+ FileUtils.rm_rf HUB_DATA
46
+ FileUtils.rm_rf "tmp"
9
47
  end
data/spec/yaml_spec.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'yaml'
3
+
4
+ YAML_OPTION=" -f yaml "
5
+ describe "Hubble with yaml output" do
6
+ before(:each) do
7
+ reset_file_system
8
+ end
9
+
10
+ it "should load list-projects" do
11
+ hub("yammer", "create-project a")
12
+ hub("yammer", "create-project b")
13
+ hub("yammer", "create-project c")
14
+
15
+ projects = YAML::load(hub("#{YAML_OPTION} yammer", "list-projects"))
16
+ projects.should == ["a", "b", "c"]
17
+ end
18
+
19
+ it "should create repositories" do
20
+ hub("yammer", "create-project a")
21
+ hub("yammer", "create-repository a b")
22
+
23
+ repositories = YAML::load(hub("yammer", "#{YAML_OPTION} list-repositories a"))
24
+ repositories.length.should == 1
25
+ repositories.first[:name].should == "b"
26
+ repositories.first[:url].should == "#{ENV['USER']}@#{HUB_HOST}:a/b.git"
27
+ end
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubbard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Foemmel
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-26 00:00:00 -06:00
12
+ date: 2010-01-29 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -26,7 +26,6 @@ description: Hubbard is a command line tool for managing git repositories.
26
26
  email: git@foemmel.com
27
27
  executables:
28
28
  - hubbard
29
- - hubbard~
30
29
  - hubbard
31
30
  extensions: []
32
31
 
@@ -63,6 +62,7 @@ files:
63
62
  - spec/hubbard_spec.rb
64
63
  - spec/spec.opts
65
64
  - spec/spec_helper.rb
65
+ - spec/yaml_spec.rb
66
66
  has_rdoc: true
67
67
  homepage: http://github.com/mfoemmel/hubbard
68
68
  licenses: []
@@ -71,7 +71,7 @@ post_install_message:
71
71
  rdoc_options:
72
72
  - --charset=UTF-8
73
73
  require_paths:
74
- - ""
74
+ - lib
75
75
  required_ruby_version: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - ">="
@@ -92,5 +92,6 @@ signing_key:
92
92
  specification_version: 3
93
93
  summary: Hubbard is a command line tool for managing git repositories.
94
94
  test_files:
95
+ - spec/yaml_spec.rb
95
96
  - spec/hubbard_spec.rb
96
97
  - spec/spec_helper.rb