hubbard 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
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