spaarti 0.0.0 → 0.0.1

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.
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