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 +4 -4
- data/.travis.yml +8 -4
- data/Rakefile +1 -1
- data/bin/spaarti +16 -0
- data/lib/spaarti.rb +16 -0
- data/lib/spaarti/repo.rb +38 -0
- data/lib/spaarti/site.rb +83 -0
- data/lib/spaarti/version.rb +5 -0
- data/spaarti.gemspec +15 -6
- data/spec/spaarti_spec.rb +0 -1
- metadata +73 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fcf32b157fb8a648a7c88e52032279fcf073ddaa
|
4
|
+
data.tar.gz: 00c9bc231f5977580cb3e7636052303500cee6ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
5
|
-
- 2.
|
6
|
-
-
|
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
|
-
|
13
|
+
- "%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}"
|
14
|
+
channels:
|
15
|
+
- irc.oftc.net#akerl
|
data/Rakefile
CHANGED
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'
|
data/lib/spaarti/repo.rb
ADDED
@@ -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
|
data/lib/spaarti/site.rb
ADDED
@@ -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
|
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 =
|
6
|
+
s.version = Spaarti::VERSION
|
4
7
|
s.date = Time.now.strftime("%Y-%m-%d")
|
5
8
|
|
6
|
-
s.summary = '
|
7
|
-
s.description =
|
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.
|
17
|
-
s.add_development_dependency 'rake', '~> 10.
|
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.
|
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
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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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:
|
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.
|
182
|
+
rubygems_version: 2.4.5
|
122
183
|
signing_key:
|
123
184
|
specification_version: 4
|
124
|
-
summary:
|
185
|
+
summary: Helper for cloning GitHub repos
|
125
186
|
test_files:
|
126
187
|
- spec/spaarti_spec.rb
|
127
188
|
- spec/spec_helper.rb
|