spaarti 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2807a3caced97b325c1b26149b1ba46e61c13092
4
- data.tar.gz: ade241b594bbe58eb8babf0b91b0a168682b3883
3
+ metadata.gz: fcf32b157fb8a648a7c88e52032279fcf073ddaa
4
+ data.tar.gz: 00c9bc231f5977580cb3e7636052303500cee6ec
5
5
  SHA512:
6
- metadata.gz: edacd341910cf8a5d3515827e9b970218f7aea496f9fd2ce47ff5909481c60b92df76bc452a4d4123815e503249344f8ea755c33497dfaf7a391a35f720d03da
7
- data.tar.gz: 60713ff79abfc8f2e2224cd6bb04f16e25b5efe71eded996106312ad0091549b6c596c709ad7a12d5e72bee2768900240b36bfe8840fdfce165a6cd732c59d73
6
+ metadata.gz: 0bd587e37edcf36bc0861604c18a551f1cb2142a9bfbd57735f6f9e8a2d2ea258ac39287b2b1d28433f67bf3a4091295d82e6d83bc5c0dfe4f97c4d241c1199d
7
+ data.tar.gz: 88f08186b7bc73e4c152cec1391ca3d1ae1ab258addbebc5fd0925b8ee4e97cc8187f3721fad28cb18bf62a26023e97aa849386f0929838aa48aec52f7d0e67f
data/.travis.yml CHANGED
@@ -1,11 +1,15 @@
1
1
  language: ruby
2
2
  cache: bundler
3
+ sudo: false
3
4
  rvm:
4
- - 2.1.0
5
- - 2.0.0
6
- - 1.9.3
5
+ - 2.2.0
6
+ - 2.1.5
7
+ - 2.0.0-p598
8
+ - 1.9.3-p551
7
9
  notifications:
8
10
  email: false
9
11
  irc:
10
12
  template:
11
- - '%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}'
13
+ - "%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}"
14
+ channels:
15
+ - irc.oftc.net#akerl
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ RSpec::Core::RakeTask.new(:spec)
7
7
 
8
8
  desc 'Run Rubocop on the gem'
9
9
  RuboCop::RakeTask.new(:rubocop) do |task|
10
- task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
10
+ task.patterns = ['lib/**/*.rb', 'spec/**/*.rb', 'bin/*']
11
11
  task.fail_on_error = true
12
12
  end
13
13
 
data/bin/spaarti ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spaarti'
4
+ require 'mercenary'
5
+
6
+ Mercenary.program(:spaarti) do |p|
7
+ p.version Spaarti::VERSION
8
+ p.description 'Tool for managing local checkouts of git repos'
9
+ p.syntax 'spaarti [options]'
10
+
11
+ p.option :config, '-c FILE', '--config FILE', 'Config file'
12
+
13
+ p.action do |_, options|
14
+ Spaarti.new(options).sync!
15
+ end
16
+ end
data/lib/spaarti.rb CHANGED
@@ -0,0 +1,16 @@
1
+ ##
2
+ # This module manages local git repos
3
+ module Spaarti
4
+ class << self
5
+ ##
6
+ # Insert a helper .new() method for creating a new Site object
7
+
8
+ def new(*args)
9
+ self::Site.new(*args)
10
+ end
11
+ end
12
+ end
13
+
14
+ require 'spaarti/version'
15
+ require 'spaarti/repo'
16
+ require 'spaarti/site'
@@ -0,0 +1,38 @@
1
+ module Spaarti
2
+ ##
3
+ # Repo object, handles individual repo syncing and state
4
+ class Repo
5
+ def initialize(data, client, params)
6
+ @raw = data
7
+ @client = client
8
+ @params = params
9
+ @path = @params[:format] % @raw
10
+ end
11
+
12
+ def sync!
13
+ return found if Dir.exist?(@path)
14
+ clone
15
+ Dir.chdir(@path) { config && add_upstream }
16
+ end
17
+
18
+ private
19
+
20
+ def found
21
+ puts "#{@raw[:full_name]} already cloned"
22
+ end
23
+
24
+ def clone
25
+ system "git clone '#{@raw[:ssh_url]}' '#{@path}'"
26
+ end
27
+
28
+ def config
29
+ @params[:git_config].each { |k, v| system "git config '#{k}' '#{v}'" }
30
+ end
31
+
32
+ def add_upstream
33
+ return unless @raw[:fork]
34
+ upstream = @client.repo(@raw[:id]).source.git_url
35
+ system "git remote add upstream '#{upstream}'"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,83 @@
1
+ require 'cymbal'
2
+ require 'octoauth'
3
+ require 'octokit'
4
+
5
+ ##
6
+ # Main Spaarti code, defines defaults and Site object
7
+ module Spaarti
8
+ DEFAULT_CONFIG_PATH = '~/.spaarti.yml'
9
+
10
+ DEFAULT_CONFIG = {
11
+ base_path: './',
12
+ auth_file: :default,
13
+ exclude: [],
14
+ format: '%{full_name}',
15
+ git_config: []
16
+ }
17
+
18
+ ##
19
+ # Site object, represents a group of repos with a config
20
+ class Site
21
+ def initialize(options)
22
+ @options = options
23
+ if options[:config] && !File.exist?(options[:config])
24
+ fail 'Config file does not exist'
25
+ end
26
+ @options[:config] ||= DEFAULT_CONFIG_PATH
27
+ end
28
+
29
+ def sync!
30
+ Dir.chdir(config[:base_path]) { repos.each(&:sync!) }
31
+ end
32
+
33
+ private
34
+
35
+ def config
36
+ @config ||= build_config
37
+ end
38
+
39
+ def build_config
40
+ path = @options[:config]
41
+ config = DEFAULT_CONFIG.dup
42
+ return config unless File.exist?(path)
43
+ file = File.open(path) { |fh| YAML.load fh.read }
44
+ return nest if file.is_a? Array
45
+ config.merge! Cymbal.symbolize(file)
46
+ end
47
+
48
+ def client
49
+ @client ||= Octokit::Client.new(
50
+ access_token: auth.token,
51
+ auto_paginate: true,
52
+ default_media_type: 'application/vnd.github.moondragon+json'
53
+ )
54
+ end
55
+
56
+ def auth
57
+ @auth ||= Octoauth.new(
58
+ note: 'spaarti',
59
+ file: config[:auth_file],
60
+ autosave: true
61
+ )
62
+ end
63
+
64
+ def repos
65
+ @repos ||= client.repos.map do |data|
66
+ next if excluded(data.name) || excluded(data.full_name)
67
+ Repo.new data.to_h, client, config.subset(:format, :git_config)
68
+ end
69
+ end
70
+
71
+ def excluded(string)
72
+ config[:exclude].any? { |x| string.match(x) }
73
+ end
74
+ end
75
+ end
76
+
77
+ ##
78
+ # Add .subset to Hash for selecting a subhash
79
+ class Hash
80
+ def subset(*keys)
81
+ select { |k| keys.include? k }
82
+ end
83
+ end
@@ -0,0 +1,5 @@
1
+ ##
2
+ # Set the version (needed for Mercenary -v)
3
+ module Spaarti
4
+ VERSION = '0.0.1'
5
+ end
data/spaarti.gemspec CHANGED
@@ -1,10 +1,13 @@
1
+ $:.unshift File.expand_path('../lib/', __FILE__)
2
+ require 'spaarti/version'
3
+
1
4
  Gem::Specification.new do |s|
2
5
  s.name = 'spaarti'
3
- s.version = '0.0.0'
6
+ s.version = Spaarti::VERSION
4
7
  s.date = Time.now.strftime("%Y-%m-%d")
5
8
 
6
- s.summary = 'Tool to maintain local clones of repos you have access to on GitHub'
7
- s.description = "Tool to maintain local clones of repos you have access to on GitHub"
9
+ s.summary = 'Helper for cloning GitHub repos'
10
+ s.description = 'Maintain local clones of repos you have access to on GitHub'
8
11
  s.authors = ['Les Aker']
9
12
  s.email = 'me@lesaker.org'
10
13
  s.homepage = 'https://github.com/akerl/spaarti'
@@ -12,10 +15,16 @@ Gem::Specification.new do |s|
12
15
 
13
16
  s.files = `git ls-files`.split
14
17
  s.test_files = `git ls-files spec/*`.split
18
+ s.executables = ['spaarti']
19
+
20
+ s.add_dependency 'octokit', '~> 3.7.0'
21
+ s.add_dependency 'octoauth', '~> 1.0.0'
22
+ s.add_dependency 'mercenary', '~> 0.3.4'
23
+ s.add_dependency 'cymbal', '~> 1.0.0'
15
24
 
16
- s.add_development_dependency 'rubocop', '~> 0.24.1'
17
- s.add_development_dependency 'rake', '~> 10.3.2'
25
+ s.add_development_dependency 'rubocop', '~> 0.28.0'
26
+ s.add_development_dependency 'rake', '~> 10.4.0'
18
27
  s.add_development_dependency 'coveralls', '~> 0.7.0'
19
- s.add_development_dependency 'rspec', '~> 3.0.0'
28
+ s.add_development_dependency 'rspec', '~> 3.2.0'
20
29
  s.add_development_dependency 'fuubar', '~> 2.0.0'
21
30
  end
data/spec/spaarti_spec.rb CHANGED
@@ -1,2 +1 @@
1
1
  require 'spec_helper'
2
-
metadata CHANGED
@@ -1,43 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spaarti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-10 00:00:00.000000000 Z
11
+ date: 2015-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: octokit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.7.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.7.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: octoauth
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: mercenary
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.3.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: cymbal
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.0
13
69
  - !ruby/object:Gem::Dependency
14
70
  name: rubocop
15
71
  requirement: !ruby/object:Gem::Requirement
16
72
  requirements:
17
73
  - - "~>"
18
74
  - !ruby/object:Gem::Version
19
- version: 0.24.1
75
+ version: 0.28.0
20
76
  type: :development
21
77
  prerelease: false
22
78
  version_requirements: !ruby/object:Gem::Requirement
23
79
  requirements:
24
80
  - - "~>"
25
81
  - !ruby/object:Gem::Version
26
- version: 0.24.1
82
+ version: 0.28.0
27
83
  - !ruby/object:Gem::Dependency
28
84
  name: rake
29
85
  requirement: !ruby/object:Gem::Requirement
30
86
  requirements:
31
87
  - - "~>"
32
88
  - !ruby/object:Gem::Version
33
- version: 10.3.2
89
+ version: 10.4.0
34
90
  type: :development
35
91
  prerelease: false
36
92
  version_requirements: !ruby/object:Gem::Requirement
37
93
  requirements:
38
94
  - - "~>"
39
95
  - !ruby/object:Gem::Version
40
- version: 10.3.2
96
+ version: 10.4.0
41
97
  - !ruby/object:Gem::Dependency
42
98
  name: coveralls
43
99
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +114,14 @@ dependencies:
58
114
  requirements:
59
115
  - - "~>"
60
116
  - !ruby/object:Gem::Version
61
- version: 3.0.0
117
+ version: 3.2.0
62
118
  type: :development
63
119
  prerelease: false
64
120
  version_requirements: !ruby/object:Gem::Requirement
65
121
  requirements:
66
122
  - - "~>"
67
123
  - !ruby/object:Gem::Version
68
- version: 3.0.0
124
+ version: 3.2.0
69
125
  - !ruby/object:Gem::Dependency
70
126
  name: fuubar
71
127
  requirement: !ruby/object:Gem::Requirement
@@ -80,9 +136,10 @@ dependencies:
80
136
  - - "~>"
81
137
  - !ruby/object:Gem::Version
82
138
  version: 2.0.0
83
- description: Tool to maintain local clones of repos you have access to on GitHub
139
+ description: Maintain local clones of repos you have access to on GitHub
84
140
  email: me@lesaker.org
85
- executables: []
141
+ executables:
142
+ - spaarti
86
143
  extensions: []
87
144
  extra_rdoc_files: []
88
145
  files:
@@ -94,7 +151,11 @@ files:
94
151
  - LICENSE
95
152
  - README.md
96
153
  - Rakefile
154
+ - bin/spaarti
97
155
  - lib/spaarti.rb
156
+ - lib/spaarti/repo.rb
157
+ - lib/spaarti/site.rb
158
+ - lib/spaarti/version.rb
98
159
  - spaarti.gemspec
99
160
  - spec/spaarti_spec.rb
100
161
  - spec/spec_helper.rb
@@ -118,10 +179,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
179
  version: '0'
119
180
  requirements: []
120
181
  rubyforge_project:
121
- rubygems_version: 2.2.2
182
+ rubygems_version: 2.4.5
122
183
  signing_key:
123
184
  specification_version: 4
124
- summary: Tool to maintain local clones of repos you have access to on GitHub
185
+ summary: Helper for cloning GitHub repos
125
186
  test_files:
126
187
  - spec/spaarti_spec.rb
127
188
  - spec/spec_helper.rb