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