git-projects 0.0.5 → 0.0.6

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