brigit 0.8.1 → 0.8.2

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/Manifest CHANGED
@@ -1,15 +1,20 @@
1
1
  bin/brigit
2
2
  lib/brigit/cli.rb
3
3
  lib/brigit/commands/command.rb
4
+ lib/brigit/commands/grab_command.rb
4
5
  lib/brigit/commands/map_command.rb
5
6
  lib/brigit/commands/update_command.rb
6
7
  lib/brigit/config_parser.rb
8
+ lib/brigit/fallible.rb
9
+ lib/brigit/inventories/gitosis_inventory.rb
10
+ lib/brigit/inventories/inventory.rb
11
+ lib/brigit/listable.rb
7
12
  lib/brigit/version.rb
8
13
  lib/brigit.rb
9
14
  lib/ext/option_parser.rb
15
+ Manifest
10
16
  Rakefile
11
17
  README.rdoc
12
18
  test/config_parser_test.rb
13
19
  test/fixtures/example.conf
14
20
  test/test_helper.rb
15
- Manifest
data/brigit.gemspec CHANGED
@@ -1,10 +1,10 @@
1
1
 
2
- # Gem::Specification for Brigit-0.8.1
2
+ # Gem::Specification for Brigit-0.8.2
3
3
  # Originally generated by Echoe
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = %q{brigit}
7
- s.version = "0.8.1"
7
+ s.version = "0.8.2"
8
8
 
9
9
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
10
  s.authors = ["FiveRuns Development Team"]
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{Git utilities}
14
14
  s.email = %q{dev@fiveruns.com}
15
15
  s.executables = ["brigit"]
16
- s.extra_rdoc_files = ["bin/brigit", "lib/brigit/cli.rb", "lib/brigit/commands/command.rb", "lib/brigit/commands/map_command.rb", "lib/brigit/commands/update_command.rb", "lib/brigit/config_parser.rb", "lib/brigit/version.rb", "lib/brigit.rb", "lib/ext/option_parser.rb", "README.rdoc"]
17
- s.files = ["bin/brigit", "lib/brigit/cli.rb", "lib/brigit/commands/command.rb", "lib/brigit/commands/map_command.rb", "lib/brigit/commands/update_command.rb", "lib/brigit/config_parser.rb", "lib/brigit/version.rb", "lib/brigit.rb", "lib/ext/option_parser.rb", "Rakefile", "README.rdoc", "test/config_parser_test.rb", "test/fixtures/example.conf", "test/test_helper.rb", "Manifest", "brigit.gemspec"]
16
+ s.extra_rdoc_files = ["bin/brigit", "lib/brigit/cli.rb", "lib/brigit/commands/command.rb", "lib/brigit/commands/grab_command.rb", "lib/brigit/commands/map_command.rb", "lib/brigit/commands/update_command.rb", "lib/brigit/config_parser.rb", "lib/brigit/fallible.rb", "lib/brigit/inventories/gitosis_inventory.rb", "lib/brigit/inventories/inventory.rb", "lib/brigit/listable.rb", "lib/brigit/version.rb", "lib/brigit.rb", "lib/ext/option_parser.rb", "README.rdoc"]
17
+ s.files = ["bin/brigit", "lib/brigit/cli.rb", "lib/brigit/commands/command.rb", "lib/brigit/commands/grab_command.rb", "lib/brigit/commands/map_command.rb", "lib/brigit/commands/update_command.rb", "lib/brigit/config_parser.rb", "lib/brigit/fallible.rb", "lib/brigit/inventories/gitosis_inventory.rb", "lib/brigit/inventories/inventory.rb", "lib/brigit/listable.rb", "lib/brigit/version.rb", "lib/brigit.rb", "lib/ext/option_parser.rb", "Manifest", "Rakefile", "README.rdoc", "test/config_parser_test.rb", "test/fixtures/example.conf", "test/test_helper.rb", "brigit.gemspec"]
18
18
  s.has_rdoc = true
19
19
  s.homepage = %q{http://github.com/fiveruns/brigit}
20
20
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Brigit", "--main", "README.rdoc"]
@@ -0,0 +1,64 @@
1
+ require 'brigit/commands/command'
2
+ require 'brigit/commands/update_command'
3
+
4
+ module Brigit
5
+
6
+ class GrabCommand < Command
7
+
8
+ self.help = "Grab repos matching optional pattern from a gitosis-admin config"
9
+
10
+ def execute!
11
+ validate!
12
+ matching_repositories.each do |name, location|
13
+ if File.exists?(name)
14
+ STDERR.puts "#{name}: Already exists, skipping..."
15
+ else
16
+ STDERR.puts "#{name}: Cloning from #{location} ..."
17
+ system "git clone '#{location}' '#{name}'"
18
+ STDERR.puts "#{name}: Updating submodules ..."
19
+ Dir.chdir name do
20
+ updater.execute!
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ #######
27
+ private
28
+ #######
29
+
30
+ def updater
31
+ @updater ||= UpdateCommand.new(options)
32
+ end
33
+
34
+ def validate!
35
+ if options.inventory.empty?
36
+ list = Inventory.listing { |name| "--#{name}" }
37
+ fail "Can't find list of repositories; need to set #{list}"
38
+ end
39
+ end
40
+
41
+ def all_repositories
42
+ options.inventory.inject({}) do |all, (klass, path)|
43
+ source = klass.new(path)
44
+ all.merge(source.repositories)
45
+ end
46
+ end
47
+
48
+ def matching_repositories
49
+ if args.empty?
50
+ all_repositories
51
+ else
52
+ matching = all_repositories.select do |name, location|
53
+ args.any? { |arg| name.include?(arg) }
54
+ end
55
+ Hash[*matching.flatten]
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+
64
+
@@ -0,0 +1,11 @@
1
+ module Brigit
2
+
3
+ module Fallible
4
+
5
+ def fail(message)
6
+ abort "\n#{message}\n\n---\n#{CLI.usage}"
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,65 @@
1
+ require 'brigit/inventories/inventory'
2
+ require 'brigit/config_parser'
3
+
4
+ module Brigit
5
+
6
+ class GitosisInventory < Inventory
7
+
8
+ def repositories
9
+ @repositories ||= begin
10
+ validate_path!
11
+ sections.values.inject({}) do |all, section|
12
+ %w(writable readonly).each do |field|
13
+ tokenize(section[field]).each do |name|
14
+ all[name] = repo_path(name)
15
+ end
16
+ end
17
+ all
18
+ end
19
+ end
20
+ end
21
+
22
+ #######
23
+ private
24
+ #######
25
+
26
+ def tokenize(text)
27
+ return [] unless text
28
+ text.scan(/(\S+)/).flatten
29
+ end
30
+
31
+ def validate_path!
32
+ fail "No such file: #{gitosis_conf}" unless File.file?(gitosis_conf)
33
+ fail "gitosis-admin is not a Git repository" unless File.file?(git_config)
34
+ end
35
+
36
+ def gitosis_conf
37
+ File.join(path, "gitosis.conf")
38
+ end
39
+
40
+ def git_config
41
+ File.join(path, '.git/config')
42
+ end
43
+
44
+ def base
45
+ @base ||= begin
46
+ config = parser.parse(File.readlines(git_config))
47
+ config[%|remote "origin"|]['url'].sub(/:.*?$/, '')
48
+ end
49
+ end
50
+
51
+ def repo_path(component)
52
+ [base, component].join(':')
53
+ end
54
+
55
+ def sections
56
+ @sections ||= parser.parse(File.readlines(gitosis_conf))
57
+ end
58
+
59
+ def parser
60
+ @parser ||= ConfigParser.new
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,21 @@
1
+ require 'brigit/listable'
2
+ require 'brigit/fallible'
3
+
4
+ module Brigit
5
+
6
+ class Inventory
7
+ include Listable
8
+ include Fallible
9
+
10
+ attr_reader :path
11
+ def initialize(path)
12
+ @path = path
13
+ end
14
+
15
+ def repositories
16
+ raise NotImplementedError, 'Abstract'
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,37 @@
1
+ module Brigit
2
+
3
+ module Listable
4
+
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+
11
+ def [](name)
12
+ list.detect { |klass| klass.name == name }
13
+ end
14
+
15
+ def inherited(klass)
16
+ list << klass
17
+ end
18
+
19
+ def list
20
+ @list ||= []
21
+ end
22
+
23
+ def listing
24
+ list.map do |l|
25
+ block_given? ? yield(l.name) : l.name
26
+ end.join(', ')
27
+ end
28
+
29
+ def name
30
+ to_s.sub(/^.+::(.+?)[A-Z][a-z]+$/, '\1').downcase
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -74,7 +74,7 @@ module Brigit
74
74
 
75
75
  MAJOR = 0
76
76
  MINOR = 8
77
- TINY = 1
77
+ TINY = 2
78
78
 
79
79
  # The current version as a Version instance
80
80
  CURRENT = new(MAJOR, MINOR, TINY)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brigit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - FiveRuns Development Team
@@ -23,9 +23,14 @@ extra_rdoc_files:
23
23
  - bin/brigit
24
24
  - lib/brigit/cli.rb
25
25
  - lib/brigit/commands/command.rb
26
+ - lib/brigit/commands/grab_command.rb
26
27
  - lib/brigit/commands/map_command.rb
27
28
  - lib/brigit/commands/update_command.rb
28
29
  - lib/brigit/config_parser.rb
30
+ - lib/brigit/fallible.rb
31
+ - lib/brigit/inventories/gitosis_inventory.rb
32
+ - lib/brigit/inventories/inventory.rb
33
+ - lib/brigit/listable.rb
29
34
  - lib/brigit/version.rb
30
35
  - lib/brigit.rb
31
36
  - lib/ext/option_parser.rb
@@ -34,18 +39,23 @@ files:
34
39
  - bin/brigit
35
40
  - lib/brigit/cli.rb
36
41
  - lib/brigit/commands/command.rb
42
+ - lib/brigit/commands/grab_command.rb
37
43
  - lib/brigit/commands/map_command.rb
38
44
  - lib/brigit/commands/update_command.rb
39
45
  - lib/brigit/config_parser.rb
46
+ - lib/brigit/fallible.rb
47
+ - lib/brigit/inventories/gitosis_inventory.rb
48
+ - lib/brigit/inventories/inventory.rb
49
+ - lib/brigit/listable.rb
40
50
  - lib/brigit/version.rb
41
51
  - lib/brigit.rb
42
52
  - lib/ext/option_parser.rb
53
+ - Manifest
43
54
  - Rakefile
44
55
  - README.rdoc
45
56
  - test/config_parser_test.rb
46
57
  - test/fixtures/example.conf
47
58
  - test/test_helper.rb
48
- - Manifest
49
59
  - brigit.gemspec
50
60
  has_rdoc: true
51
61
  homepage: http://github.com/fiveruns/brigit