git-projects 0.0.6 → 0.0.7
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/lib/git-projects/version.rb +1 -1
- data/lib/helpers/git_project.rb +24 -131
- data/lib/helpers/git_project_config.rb +85 -0
- data/lib/helpers/git_project_remote.rb +50 -0
- metadata +25 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3242cc416b633af159ae2c9382e272fa0fcf3e0
|
4
|
+
data.tar.gz: c03664dc2621b8ec9bbb539df5738e1f4ffe9dd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee5de45113f5eb7fd93514561a8bbd7b9cc8c164fae9d3b538b7fbd593fdc03923e6ca966714842f9462845b8d36c42e04a3aa272c3556e8e08ea50c4a65f97e
|
7
|
+
data.tar.gz: a44f32a3964a5ea591cd30a9f5ef588c2848fceddd3af063b1b110cb143f5db035f4cc932a0c7a37d3b1111eefbc3f9a5c2821d0cf7272f61986a9daeebe4135
|
data/lib/git-projects/version.rb
CHANGED
data/lib/helpers/git_project.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'git_project_config'
|
2
|
+
require_relative 'git_project_remote'
|
1
3
|
require_relative 'project'
|
2
4
|
require 'git'
|
3
5
|
require 'yaml'
|
@@ -7,139 +9,13 @@ require 'colorize'
|
|
7
9
|
class GitProject
|
8
10
|
attr_reader :project
|
9
11
|
|
12
|
+
include GitProjectConfig
|
13
|
+
include GitProjectRemote
|
14
|
+
|
10
15
|
def initialize(config)
|
11
16
|
@project = Project.new(config)
|
12
17
|
end
|
13
18
|
|
14
|
-
class << self
|
15
|
-
# Create YAML file
|
16
|
-
def create_yaml_file(config_file, projects)
|
17
|
-
File.open(config_file, 'w') do |f|
|
18
|
-
f.write projects.to_yaml.gsub(/- /, '').gsub(/ /, ' ').gsub(/---/, '')
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# Create a hash for remotes
|
23
|
-
def add_remotes_to_hash(g, dir)
|
24
|
-
remotes_h = {}
|
25
|
-
r = {}
|
26
|
-
remotes_h.tap do |remotes|
|
27
|
-
g.remotes.each do |remote|
|
28
|
-
r[remote.name] = remote.url
|
29
|
-
end
|
30
|
-
r['all'] = true
|
31
|
-
r['root_dir'] = dir
|
32
|
-
remotes.merge!(r)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# Create a configuration file based on a root path
|
37
|
-
def create_config(dir, group = nil)
|
38
|
-
dir = dir.is_a?(Array) ? dir.first : dir
|
39
|
-
config_file = File.join(dir, 'git-projects.yml')
|
40
|
-
group ||= dir.split(File::SEPARATOR).last if dir
|
41
|
-
|
42
|
-
fail "The config file, #{config_file} exists" if File.exist?(config_file)
|
43
|
-
|
44
|
-
projects = []
|
45
|
-
Dir.entries(dir)[2..-1].each do |project|
|
46
|
-
g = Git.open(File.join(dir, project))
|
47
|
-
p = {}
|
48
|
-
p[project] = add_remotes_to_hash(g, dir)
|
49
|
-
p[project]['group'] = group
|
50
|
-
projects << p
|
51
|
-
create_yaml_file(config_file, projects)
|
52
|
-
end
|
53
|
-
puts "You can later fetch changes through:
|
54
|
-
\ngit-projects fetch #{group}".green
|
55
|
-
end
|
56
|
-
|
57
|
-
def create_root_path(path)
|
58
|
-
@project.create_root_path(path)
|
59
|
-
end
|
60
|
-
|
61
|
-
# Create dir unless it exists
|
62
|
-
def create_directory(path)
|
63
|
-
`mkdir -p #{path}` unless File.directory?(path)
|
64
|
-
puts 'Creating directory: '.green + "#{path}".blue
|
65
|
-
end
|
66
|
-
|
67
|
-
# Create root_dir
|
68
|
-
def create_root_dir(path)
|
69
|
-
GitProject.create_directory(path) unless File.directory?(path)
|
70
|
-
end
|
71
|
-
|
72
|
-
# Check for the config
|
73
|
-
def check_config
|
74
|
-
if ENV['GIT_PROJECTS']
|
75
|
-
puts "Checking repositories. If things go wrong,
|
76
|
-
update #{ENV['GIT_PROJECTS']}".green
|
77
|
-
else
|
78
|
-
fail "Please add the path your git projects config. \n
|
79
|
-
export GIT_PROJECTS=/path/to/git_projects.yml"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Clone unless dir exists
|
84
|
-
def clone(url, name, path)
|
85
|
-
r = "#{path}/#{name}"
|
86
|
-
if Git.open(r)
|
87
|
-
puts 'Already cloned '.yellow + "#{url}".blue
|
88
|
-
else
|
89
|
-
Git.clone(url, name, path: path) || Git.init(r)
|
90
|
-
g = Git.open(r)
|
91
|
-
puts "Cloning #{url} as #{name} into #{path}".green
|
92
|
-
end
|
93
|
-
g
|
94
|
-
end
|
95
|
-
|
96
|
-
# Add remote
|
97
|
-
def add_remote(g, v)
|
98
|
-
unless g.remotes.map(&:name).include?('all')
|
99
|
-
g.add_remote('all', v['origin'])
|
100
|
-
end
|
101
|
-
v.each do |name, remote|
|
102
|
-
next if %w(root_dir all group).include?(name) ||
|
103
|
-
g.remotes.map(&:name).include?(name)
|
104
|
-
if g.add_remote(name, remote)
|
105
|
-
# add to all remote
|
106
|
-
# useful when you want to do git push all --all
|
107
|
-
`git remote set-url --add all #{remote}`
|
108
|
-
puts "Added remote #{name}".green
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def fetch(g)
|
114
|
-
g.remotes.each do |r|
|
115
|
-
next if %w(root_dir all group).include?(r.name)
|
116
|
-
r.fetch
|
117
|
-
puts "Fetching updates from #{r.name}: #{r.url}".green
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
# 1. Clone all repositories based on the origin key
|
123
|
-
# 2. Add all other remotes unless it is origin
|
124
|
-
def create_project_and_remotes(k, v)
|
125
|
-
unless v['root_dir']
|
126
|
-
puts "root_dir isn't defined for #{k}"
|
127
|
-
end
|
128
|
-
unless File.directory?(v['root_dir'])
|
129
|
-
puts "The dir #{v['root_dir']} does not exist"
|
130
|
-
end
|
131
|
-
GitProject.create_root_dir(v['root_dir'])
|
132
|
-
g = GitProject.clone(v.values[0], k, v['root_dir'])
|
133
|
-
GitProject.add_remote(g, v) if g
|
134
|
-
end
|
135
|
-
|
136
|
-
def initialize_and_add_remotes(k, v)
|
137
|
-
g = Git.init("#{v['root_dir']}/#{k}")
|
138
|
-
return nil unless g
|
139
|
-
GitProject.add_remote(g, v)
|
140
|
-
GitProject.fetch(g)
|
141
|
-
end
|
142
|
-
|
143
19
|
def init
|
144
20
|
@project.all.each do |k, v|
|
145
21
|
begin
|
@@ -153,6 +29,13 @@ class GitProject
|
|
153
29
|
end
|
154
30
|
end
|
155
31
|
|
32
|
+
def initialize_and_add_remotes(k, v)
|
33
|
+
g = Git.init("#{v['root_dir']}/#{k}")
|
34
|
+
return nil unless g
|
35
|
+
GitProject.add_remote(g, v)
|
36
|
+
GitProject.fetch(g)
|
37
|
+
end
|
38
|
+
|
156
39
|
def projects
|
157
40
|
@project.all
|
158
41
|
end
|
@@ -177,8 +60,18 @@ class GitProject
|
|
177
60
|
end
|
178
61
|
end
|
179
62
|
|
180
|
-
#
|
181
|
-
#
|
63
|
+
# 1. Clone all repositories based on the origin key
|
64
|
+
# 2. Add all other remotes unless it is origin
|
65
|
+
def create_project_and_remotes(k, v)
|
66
|
+
puts "root_dir isn't defined for #{k}" unless v['root_dir']
|
67
|
+
unless File.directory?(v['root_dir'])
|
68
|
+
puts "The dir #{v['root_dir']} does not exist"
|
69
|
+
end
|
70
|
+
GitProject.create_root_dir(v['root_dir'])
|
71
|
+
g = GitProject.clone(v.values[0], k, v['root_dir'])
|
72
|
+
GitProject.add_remote(g, v) if g
|
73
|
+
end
|
74
|
+
|
182
75
|
# By default, fetch from all
|
183
76
|
def fetch_all(group = nil)
|
184
77
|
@project.all(group).each do |k, v|
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# Create YML config
|
2
|
+
module GitProjectConfig
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
# Create YML config
|
8
|
+
module ClassMethods
|
9
|
+
def create_root_path(path)
|
10
|
+
@project.create_root_path(path)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Create dir unless it exists
|
14
|
+
def create_directory(path)
|
15
|
+
`mkdir -p #{path}` unless File.directory?(path)
|
16
|
+
puts 'Creating directory: '.green + "#{path}".blue
|
17
|
+
end
|
18
|
+
|
19
|
+
# Create root_dir
|
20
|
+
def create_root_dir(path)
|
21
|
+
GitProject.create_directory(path) unless File.directory?(path)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Check for the config
|
25
|
+
def check_config
|
26
|
+
if ENV['GIT_PROJECTS']
|
27
|
+
puts "Checking repositories. If things go wrong,
|
28
|
+
update #{ENV['GIT_PROJECTS']}".green
|
29
|
+
else
|
30
|
+
fail "Please add the path your git projects config. \n
|
31
|
+
export GIT_PROJECTS=/path/to/git_projects.yml"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Create YAML file
|
36
|
+
def create_yaml_file(config_file, projects)
|
37
|
+
File.open(config_file, 'w') do |f|
|
38
|
+
f.write projects.to_yaml.gsub(/- /, '').gsub(/ /, ' ').gsub(/---/, '')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Create a hash for remotes
|
43
|
+
def add_remotes_to_hash(g, dir)
|
44
|
+
remotes_h = {}
|
45
|
+
r = {}
|
46
|
+
remotes_h.tap do |remotes|
|
47
|
+
g.remotes.each do |remote|
|
48
|
+
r[remote.name] = remote.url
|
49
|
+
end
|
50
|
+
r['all'] = true
|
51
|
+
r['root_dir'] = dir
|
52
|
+
remotes.merge!(r)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Create has for the project
|
57
|
+
def project_info_hash(dir, project, group)
|
58
|
+
g = Git.open(File.join(dir, project))
|
59
|
+
p = {}
|
60
|
+
p.tap do |pr|
|
61
|
+
pr[project] = add_remotes_to_hash(g, dir)
|
62
|
+
pr[project]['group'] = group
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def create_project_info_hash(projects, dir, group, config_file)
|
67
|
+
Dir.entries(dir)[2..-1].each do |project|
|
68
|
+
projects << project_info_hash(dir, project, group)
|
69
|
+
create_yaml_file(config_file, projects)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Create a configuration file based on a root path
|
74
|
+
def create_config(dir, group = nil)
|
75
|
+
dir = dir.is_a?(Array) ? dir.first : dir
|
76
|
+
config_file = File.join(dir, 'git-projects.yml')
|
77
|
+
group ||= dir.split(File::SEPARATOR).last if dir
|
78
|
+
fail "The config file, #{config_file} exists" if File.exist?(config_file)
|
79
|
+
projects = []
|
80
|
+
create_project_info_hash(projects, dir, group, config_file)
|
81
|
+
puts "You can later fetch changes through:
|
82
|
+
\ngit-projects fetch #{group}".green
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# Mostly methods for checking/ adding new remotes
|
2
|
+
module GitProjectRemote
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
# Check/ add new remotes
|
8
|
+
module ClassMethods
|
9
|
+
# Clone unless dir exists
|
10
|
+
def clone(url, name, path)
|
11
|
+
r = "#{path}/#{name}"
|
12
|
+
if Git.open(r)
|
13
|
+
puts 'Already cloned '.yellow + "#{url}".blue
|
14
|
+
else
|
15
|
+
Git.clone(url, name, path: path) || Git.init(r)
|
16
|
+
g = Git.open(r)
|
17
|
+
puts "Cloning #{url} as #{name} into #{path}".green
|
18
|
+
end
|
19
|
+
g
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch(g)
|
23
|
+
g.remotes.each do |r|
|
24
|
+
next if %w(root_dir all group).include?(r.name)
|
25
|
+
r.fetch
|
26
|
+
puts "Fetching updates from #{r.name}: #{r.url}".green
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def remote_exists?(g, name)
|
31
|
+
g.remotes.map(&:name).include?(name)
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_new_remote(g, name, remote)
|
35
|
+
g.add_remote(name, remote)
|
36
|
+
`git remote set-url --add all #{remote}`
|
37
|
+
puts "Added remote #{name}".green
|
38
|
+
end
|
39
|
+
|
40
|
+
# Add remote
|
41
|
+
def add_remote(g, v)
|
42
|
+
g.add_remote('origin', v['origin']) unless remote_exists?(g, 'origin')
|
43
|
+
v.each do |name, remote|
|
44
|
+
next if %w(root_dir all group).include?(name) ||
|
45
|
+
g.remotes.map(&:name).include?(name)
|
46
|
+
add_new_remote(g, name, remote)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-projects
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katherine Pe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: git
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -25,13 +39,13 @@ dependencies:
|
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: 1.2.7
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
42
|
+
name: aruba
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '0'
|
34
|
-
type: :
|
48
|
+
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
@@ -39,19 +53,19 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: minitest
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - '='
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
61
|
+
version: 5.4.0
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - '='
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
68
|
+
version: 5.4.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,6 +105,8 @@ files:
|
|
91
105
|
- lib/git-projects.rb
|
92
106
|
- lib/git-projects/version.rb
|
93
107
|
- lib/helpers/git_project.rb
|
108
|
+
- lib/helpers/git_project_config.rb
|
109
|
+
- lib/helpers/git_project_remote.rb
|
94
110
|
- lib/helpers/project.rb
|
95
111
|
homepage: https://github.com/katgironpe/git-projects
|
96
112
|
licenses:
|