git-projects 0.0.5 → 0.0.6

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: ba0871ee122c54f64d4cc3f1aca28789f60a0755
4
- data.tar.gz: a193c614e24c3d3f423d8d6e96b424ae86ba4064
3
+ metadata.gz: 145601748d4cda601bc403ea515b76512ab3230f
4
+ data.tar.gz: 14f0a8efee0d133ff9e286a3358c47dbe7cb3a1a
5
5
  SHA512:
6
- metadata.gz: 1967e90f959781598fb858055354ae4dcd789e214c7d2fa70e940647d3a9655d28cd897cee8906d5b763bb9482d42e633f6cf008a96f19bcfce2211933967976
7
- data.tar.gz: 8bf97b0476ce481833b9d8710cb58e83279d3b05800803ffbb08e59220811e8b1e066609d40f89f0174db09bd082219c9a1a20bd2bbe860cbdb1b61f37eb07d0
6
+ metadata.gz: 138dd6c41ae38666eae2efd1ddd3e746183d6dc42961243e3d1b4eda5c1bb7069d7abf7bf6f2733e3b71bd8693455f143d954dec573bcb84e64212709e1d2f8c
7
+ data.tar.gz: af62eb78ea5f794107b87cdfada3718a373bdc621b451c33b838ab25fbdbf8668bea6879d6aa55054b549ffddb039e537a07a9057a0dc4c32e4686e15c5d0a1d
@@ -1,3 +1,3 @@
1
1
  module GitProjects
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
data/lib/git-projects.rb CHANGED
@@ -11,20 +11,18 @@ program_desc 'Easily manage Git projects'
11
11
 
12
12
  desc 'Create a config'
13
13
  command :config do |c|
14
- c.action do |global_options,options,args|
14
+ c.action do |global_options, options, args|
15
15
  config_path = "#{args[0]}/git-projects.yml"
16
16
  group = args[1] || nil
17
17
  GitProject.create_config(args[0], group)
18
- if File.open(config_path)
19
- puts "Successfully created git-projects.yml".green
20
- end
18
+ puts 'Created git-projects.yml'.green if File.open(config_path)
21
19
  end
22
20
  end
23
21
 
24
22
  desc 'Clone or initialize all projects'
25
23
  command :init do |c|
26
24
  c.action do
27
- GitProject.check_config # the pre feature of GLI has a bug. investigate later.
25
+ GitProject.check_config
28
26
  GitProject.new(ENV['GIT_PROJECTS']).init
29
27
  end
30
28
  end
@@ -39,10 +37,10 @@ end
39
37
 
40
38
  desc 'Fetch changes from all remotes'
41
39
  command :fetch do |c|
42
- c.action do |global_options,options,args|
40
+ c.action do |global_options, options, args|
43
41
  GitProject.check_config
44
42
  if GitProject.new(ENV['GIT_PROJECTS']).fetch_all(args[0])
45
- puts "Successfully fetched changes".green
43
+ puts 'Successfully fetched changes'.green
46
44
  end
47
45
  end
48
46
  end
@@ -3,25 +3,24 @@ require 'git'
3
3
  require 'yaml'
4
4
  require 'colorize'
5
5
 
6
+ # GitProject contains helpers for Git commands
6
7
  class GitProject
7
-
8
- attr :project
8
+ attr_reader :project
9
9
 
10
10
  def initialize(config)
11
11
  @project = Project.new(config)
12
12
  end
13
13
 
14
14
  class << self
15
-
16
15
  # Create YAML file
17
16
  def create_yaml_file(config_file, projects)
18
- File.open(config_file, "w") do |f|
19
- f.write projects.to_yaml.gsub(/- /,'').gsub(/ /,' ').gsub(/---/,'')
17
+ File.open(config_file, 'w') do |f|
18
+ f.write projects.to_yaml.gsub(/- /, '').gsub(/ /, ' ').gsub(/---/, '')
20
19
  end
21
20
  end
22
21
 
23
22
  # Create a hash for remotes
24
- def add_remotes_to_hash(g, p, dir)
23
+ def add_remotes_to_hash(g, dir)
25
24
  remotes_h = {}
26
25
  r = {}
27
26
  remotes_h.tap do |remotes|
@@ -35,37 +34,34 @@ class GitProject
35
34
  end
36
35
 
37
36
  # Create a configuration file based on a root path
38
- def create_config(dir, group=nil)
37
+ def create_config(dir, group = nil)
39
38
  dir = dir.is_a?(Array) ? dir.first : dir
40
- config_file = File.join(dir, "git-projects.yml")
39
+ config_file = File.join(dir, 'git-projects.yml')
41
40
  group ||= dir.split(File::SEPARATOR).last if dir
42
41
 
43
- unless File.exists?(config_file)
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, p, 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: git-projects fetch #{group}".green
54
- else
55
- raise "The config file, #{config_file} exists"
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)
56
52
  end
53
+ puts "You can later fetch changes through:
54
+ \ngit-projects fetch #{group}".green
57
55
  end
58
56
 
59
- def set_root_path(path)
60
- @project.set_root_path(path)
57
+ def create_root_path(path)
58
+ @project.create_root_path(path)
61
59
  end
62
60
 
63
61
  # Create dir unless it exists
64
62
  def create_directory(path)
65
- unless File.directory?(path)
66
- `mkdir -puts #{path}`
67
- puts "Creating directory: ".green+"#{path}".blue
68
- end
63
+ `mkdir -p #{path}` unless File.directory?(path)
64
+ puts 'Creating directory: '.green + "#{path}".blue
69
65
  end
70
66
 
71
67
  # Create root_dir
@@ -76,9 +72,11 @@ class GitProject
76
72
  # Check for the config
77
73
  def check_config
78
74
  if ENV['GIT_PROJECTS']
79
- puts "Checking repositories. If things go wrong, update #{ENV['GIT_PROJECTS']}".green
75
+ puts "Checking repositories. If things go wrong,
76
+ update #{ENV['GIT_PROJECTS']}".green
80
77
  else
81
- raise "Please add the path your git projects config. \n export GIT_PROJECTS=/path/to/git_projects.yml"
78
+ fail "Please add the path your git projects config. \n
79
+ export GIT_PROJECTS=/path/to/git_projects.yml"
82
80
  end
83
81
  end
84
82
 
@@ -86,7 +84,7 @@ class GitProject
86
84
  def clone(url, name, path)
87
85
  r = "#{path}/#{name}"
88
86
  if Git.open(r)
89
- puts "Already cloned ".yellow+ "#{url}".blue
87
+ puts 'Already cloned '.yellow + "#{url}".blue
90
88
  else
91
89
  Git.clone(url, name, path: path) || Git.init(r)
92
90
  g = Git.open(r)
@@ -97,47 +95,60 @@ class GitProject
97
95
 
98
96
  # Add remote
99
97
  def add_remote(g, v)
100
- g.add_remote('all', v['origin']) unless g.remotes.map(&:name).include?('all')
98
+ unless g.remotes.map(&:name).include?('all')
99
+ g.add_remote('all', v['origin'])
100
+ end
101
101
  v.each do |name, remote|
102
- unless ['root_dir', 'all', 'group'].include?(name) || g.remotes.map(&:name).include?(name)
103
- if g.add_remote(name, remote)
104
- # add to all remote
105
- # useful when you want to do git push all --all
106
- `git remote set-url --add all #{remote}`
107
- puts "Added remote #{name}".green
108
- end
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
109
  end
110
110
  end
111
111
  end
112
112
 
113
- def fetch(g, url)
113
+ def fetch(g)
114
114
  g.remotes.each do |r|
115
- unless ['root_dir', 'all', 'group'].include?(name)
116
- r.fetch
117
- puts "Fetching updates from #{r.name}: #{r.url}".green
118
- end
115
+ next if %w(root_dir all group).include?(r.name)
116
+ r.fetch
117
+ puts "Fetching updates from #{r.name}: #{r.url}".green
119
118
  end
120
119
  end
121
120
  end
122
121
 
123
122
  # 1. Clone all repositories based on the origin key
124
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
+
125
143
  def init
126
- @project.all.each do |k,v|
144
+ @project.all.each do |k, v|
127
145
  begin
128
- puts "root_dir isn't defined for #{k}" unless v['root_dir']
129
- puts "The dir #{v['root_dir']} does not exist" unless File.directory?(v['root_dir'])
130
- GitProject.create_root_dir(v['root_dir'])
131
- g = GitProject.clone(v.values[0], k, v['root_dir'])
132
- GitProject.add_remote(g,v) if g
146
+ create_project_and_remotes(k, v)
133
147
  rescue => e
134
- g = Git.init("#{v['root_dir']}/#{k}")
135
- if g
136
- GitProject.add_remote(g,v)
137
- GitProject.fetch(g, v)
138
- end
148
+ initialize_and_add_remotes(k, v)
139
149
  puts "Please check paths and permissions for #{k}. Error: #{e}".red
140
- puts "Failed to clone #{v.values[0]}. Initialized & fetch update from remotes instead.".yellow
150
+ puts "Failed to clone #{v.values[0]}. Initialized &
151
+ fetched updates from remotes instead.".yellow
141
152
  end
142
153
  end
143
154
  end
@@ -158,10 +169,10 @@ class GitProject
158
169
 
159
170
  # Add missing remotes
160
171
  def add_remotes
161
- @project.all.each do |k,v|
172
+ @project.all.each do |k, v|
162
173
  working_dir = "#{v['root_dir']}/#{k}"
163
174
  g = Git.open(working_dir) || Git.init(working_dir)
164
- GitProject.add_remote(g,v)
175
+ GitProject.add_remote(g, v)
165
176
  puts "Checking new remotes for #{k}".green
166
177
  end
167
178
  end
@@ -169,15 +180,13 @@ class GitProject
169
180
  # Fetch all updates
170
181
  # Group is optional
171
182
  # By default, fetch from all
172
- def fetch_all(group=nil)
173
- @project.all(group).each do |k,v|
183
+ def fetch_all(group = nil)
184
+ @project.all(group).each do |k, v|
174
185
  puts "Fetching changes for #{k}".green
175
186
  GitProject.create_root_dir(v['root_dir'])
176
187
  working_dir = "#{v['root_dir']}/#{k}"
177
188
  g = Git.open(working_dir) || Git.init(working_dir)
178
- GitProject.fetch(g, v)
189
+ GitProject.fetch(g)
179
190
  end
180
- return true
181
191
  end
182
-
183
192
  end
@@ -1,25 +1,25 @@
1
1
  require 'yaml'
2
2
  require 'colorize'
3
3
 
4
+ # Project represents a Git project
4
5
  class Project
5
-
6
- attr :projects
6
+ attr_reader :projects
7
7
 
8
8
  def initialize(config)
9
9
  @projects = YAML.load_file(config)
10
10
  end
11
11
 
12
- def all(group=nil)
13
- group ? @projects.select { |k, v| v['group'].include?(group) } : @projects
12
+ def all(group = nil)
13
+ group ? @projects.select { |_k, v| v['group'].include?(group) } : @projects
14
14
  end
15
15
 
16
16
  def first
17
17
  all.first
18
18
  end
19
19
 
20
- def set_root_path(path)
20
+ def create_root_path(path)
21
21
  @projects.tap do |project|
22
- project.each do |k,v|
22
+ project.each do |_k, v|
23
23
  v['root_dir'] = path
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-projects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-02-02 00:00:00.000000000 Z
11
+ date: 2014-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.6
19
+ version: 1.2.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2.6
26
+ version: 1.2.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: colorize
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  requirements: []
115
115
  rubyforge_project:
116
- rubygems_version: 2.2.1
116
+ rubygems_version: 2.2.2
117
117
  signing_key:
118
118
  specification_version: 4
119
119
  summary: Easily manage Git projects