onboard 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/onboard/cli.rb +9 -1
- data/lib/onboard/confirm.rb +12 -4
- data/lib/onboard/download.rb +7 -1
- data/lib/onboard/project.rb +53 -21
- data/lib/onboard/repo.rb +44 -7
- data/lib/onboard/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjlmMTg5NmViZWI0N2VmNGNhYTRkNDg5ZDM2YWFjYWU5Y2EwZWI5NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmU4ZjRiMjllNWFhYjlhODY1ODFjNjM2YTFkNDIxNjEzM2I1NWE1ZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmVlZjM4MmExZGJlMjE1YmQ4OWNmOGE3NDI5ZjM1NGE1ODA1YzQ1ZTE4MTk3
|
10
|
+
ZjIzNTFhMzMzOGFhZTMwMzgwYzU2ZWJmMGYxYzc5ZjUwYTFlMTM2MDYyOTU2
|
11
|
+
YWY5NjFiMDFhNWQ2MmM1YTZhYzY0NmViZDk2OTJkM2VkMGVmYjY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjI0MGMwNjlkYjNjODg0MmZjNjg0ZTk5MzdjZTQ4MDk5MThkZjkwZjhmNTE3
|
14
|
+
ODIzMTQ1YmNhYzhmN2E1YzI3OWQyODM2ZmI5NGNlYWNmZGIxOTNlNjIzNWQ1
|
15
|
+
ZGFlNDgwMzg0ZDk3M2E5YTllYjgzODUwOTFjM2FmMzIzM2QzODY=
|
data/lib/onboard/cli.rb
CHANGED
@@ -28,7 +28,7 @@ module Onboard
|
|
28
28
|
option :force, :aliases => "-f", :desc => "Force add modules (even if already present)"
|
29
29
|
option :no, :aliases => "-n", :desc => "Assume 'no' for all prompts"
|
30
30
|
option :modules, :aliases => "-m", :type => :array, :desc => "Pass a list of modules"
|
31
|
-
|
31
|
+
option :delete, :aliases => "-d", :desc => "Delete existing projects"
|
32
32
|
# option :source, :aliases => "-s", :desc => "Specify a project source other than drupal.org"
|
33
33
|
option :themes, :aliases => "-t", :type => :array, :desc => "Pass a list of themes"
|
34
34
|
option :vc, :type => :boolean, :default => true, :desc => "Enable/Disable version control handling"
|
@@ -50,6 +50,14 @@ module Onboard
|
|
50
50
|
projects[File.basename(x)] = y[0]
|
51
51
|
end
|
52
52
|
puts ""
|
53
|
+
if options[:delete] == 'delete'
|
54
|
+
say("Ready to delete existing projects:", :yellow)
|
55
|
+
Confirm.new("Proceed?", true).yes?
|
56
|
+
found.each do |x, y|
|
57
|
+
Project.new.clean(x)
|
58
|
+
projects[File.basename(x)] = ''
|
59
|
+
end
|
60
|
+
end
|
53
61
|
end
|
54
62
|
if options[:force] != 'force'
|
55
63
|
if found.empty? == false
|
data/lib/onboard/confirm.rb
CHANGED
@@ -4,11 +4,12 @@ require 'thor'
|
|
4
4
|
|
5
5
|
module Onboard
|
6
6
|
class Confirm < Thor
|
7
|
-
attr_reader :message
|
7
|
+
attr_reader :message, :full_stop
|
8
8
|
|
9
9
|
no_tasks do
|
10
|
-
def initialize(message)
|
10
|
+
def initialize(message, full_stop = false)
|
11
11
|
@message = message
|
12
|
+
@full_stop = full_stop
|
12
13
|
end
|
13
14
|
|
14
15
|
def yes?
|
@@ -18,8 +19,15 @@ module Onboard
|
|
18
19
|
puts ""
|
19
20
|
end
|
20
21
|
if answer =~ /^[N]$/i
|
21
|
-
|
22
|
-
|
22
|
+
if full_stop
|
23
|
+
say("Script was exited.")
|
24
|
+
exit
|
25
|
+
else
|
26
|
+
say("Action was aborted.")
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
elsif answer =~ /^[Y]$/i
|
30
|
+
return true
|
23
31
|
end
|
24
32
|
end
|
25
33
|
end
|
data/lib/onboard/download.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require 'fileutils'
|
3
4
|
require 'net/http'
|
4
5
|
|
5
6
|
module Onboard
|
6
7
|
class Download
|
7
|
-
|
8
|
+
attr_reader :cache_dir
|
9
|
+
|
10
|
+
def initialize(cache_dir='/tmp/onboard/cache')
|
8
11
|
@cache_dir = cache_dir
|
9
12
|
end
|
10
13
|
|
@@ -13,6 +16,9 @@ module Onboard
|
|
13
16
|
end
|
14
17
|
|
15
18
|
def fetch(url, max_age=1800)
|
19
|
+
unless File.directory?(cache_dir)
|
20
|
+
FileUtils.mkdir_p(cache_dir)
|
21
|
+
end
|
16
22
|
file_path = self.path(url)
|
17
23
|
if File.exists? file_path
|
18
24
|
return File.new(file_path).read if Time.now-File.mtime(file_path)<max_age
|
data/lib/onboard/project.rb
CHANGED
@@ -38,32 +38,60 @@ module Onboard
|
|
38
38
|
|
39
39
|
def hacked?(project, existing)
|
40
40
|
self.clean("#{path}/#{project}")
|
41
|
-
link =
|
41
|
+
link = self.build_link(project, existing)
|
42
42
|
Download.new.fetch(link)
|
43
43
|
self.extract(Download.new.path(link)) if self.verify(project, link, existing)
|
44
|
-
|
45
|
-
|
46
|
-
changes = Repo.new(st).st
|
44
|
+
repo = self.build_vc(project)
|
45
|
+
changes = Repo.new(repo).st(true)
|
47
46
|
if changes.empty? == false
|
48
|
-
Confirm.new("Proceed?").yes?
|
47
|
+
return !Confirm.new("Proceed?").yes?
|
48
|
+
else
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def latest?(latest, existing, project)
|
54
|
+
if Gem::Dependency.new('', "~> #{latest}").match?('', "#{existing}")
|
55
|
+
say("#{project} is already at the latest version (#{latest}).", :yellow)
|
56
|
+
return true
|
57
|
+
else
|
58
|
+
return false
|
49
59
|
end
|
50
60
|
end
|
51
61
|
|
62
|
+
def build_link(project, version)
|
63
|
+
DRUPAL_DL_LINK + "#{project}-#{version}.tar.gz"
|
64
|
+
end
|
65
|
+
|
52
66
|
def dl
|
53
67
|
changes = []
|
54
68
|
projects.each do |x, y|
|
55
|
-
self.
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
69
|
+
md5, version = self.release(x)
|
70
|
+
if y.empty? == false
|
71
|
+
if !self.hacked?(x, y) && !self.latest?(version, y, x)
|
72
|
+
proceed = true
|
73
|
+
else
|
74
|
+
proceed = false
|
75
|
+
end
|
76
|
+
else
|
77
|
+
proceed = true
|
78
|
+
end
|
79
|
+
if proceed
|
80
|
+
self.clean("#{path}/#{x}")
|
81
|
+
link = self.build_link(x, version)
|
82
|
+
Download.new.fetch(link)
|
83
|
+
# TODO: retry download after failed download verification
|
84
|
+
self.extract(Download.new.path(link)) if self.verify(x, link)
|
85
|
+
if vc == true
|
86
|
+
repo = self.build_vc(x)
|
87
|
+
changes += self.vc_up(repo)
|
88
|
+
else
|
89
|
+
say("#{x} added to codebase but changes are not yet under version control.", :yellow)
|
90
|
+
end
|
65
91
|
else
|
66
|
-
|
92
|
+
self.clean("#{path}/#{x}")
|
93
|
+
repo = self.build_vc(x)
|
94
|
+
Repo.new(repo).co
|
67
95
|
end
|
68
96
|
end
|
69
97
|
if changes.empty? == false
|
@@ -81,6 +109,10 @@ module Onboard
|
|
81
109
|
return repo
|
82
110
|
end
|
83
111
|
|
112
|
+
def vc_co(args)
|
113
|
+
Repo.new(args).co
|
114
|
+
end
|
115
|
+
|
84
116
|
def vc_up(args)
|
85
117
|
g = Repo.new(args)
|
86
118
|
info = g.info
|
@@ -106,11 +138,11 @@ module Onboard
|
|
106
138
|
end
|
107
139
|
|
108
140
|
def verify(x, file, version='')
|
109
|
-
md5,
|
141
|
+
md5, version = self.release(x, version)
|
110
142
|
if md5 == Digest::MD5.file(Download.new.path(file)).hexdigest
|
111
143
|
return true
|
112
144
|
else
|
113
|
-
say("Verification failed for #{
|
145
|
+
say("Verification failed for #{x} download!", :red)
|
114
146
|
exit
|
115
147
|
end
|
116
148
|
end
|
@@ -124,19 +156,19 @@ module Onboard
|
|
124
156
|
if version.empty? == false
|
125
157
|
doc.xpath('//releases//release').each do |item|
|
126
158
|
if item.at_xpath('version').content == version
|
127
|
-
releases[item.at_xpath('mdhash').content] = item.at_xpath('
|
159
|
+
releases[item.at_xpath('mdhash').content] = item.at_xpath('version').content
|
128
160
|
end
|
129
161
|
end
|
130
162
|
else
|
131
163
|
doc.xpath('//releases//release').each do |item|
|
132
164
|
if !item.at_xpath('version_extra')
|
133
|
-
releases[item.at_xpath('mdhash').content] = item.at_xpath('
|
165
|
+
releases[item.at_xpath('mdhash').content] = item.at_xpath('version').content
|
134
166
|
end
|
135
167
|
end
|
136
168
|
end
|
137
169
|
if releases.nil?
|
138
170
|
doc.xpath('//releases//release').each do |item|
|
139
|
-
releases[item.at_xpath('mdhash').content] = item.at_xpath('
|
171
|
+
releases[item.at_xpath('mdhash').content] = item.at_xpath('version').content
|
140
172
|
end
|
141
173
|
end
|
142
174
|
return releases.first
|
data/lib/onboard/repo.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'fileutils'
|
3
4
|
require 'git'
|
4
5
|
require 'pathname'
|
5
6
|
require 'thor'
|
6
7
|
|
7
8
|
module Onboard
|
8
9
|
class Repo < Thor
|
9
|
-
attr_reader :g, :path, :branch, :codebase, :
|
10
|
+
attr_reader :g, :path, :branch, :codebase, :project
|
10
11
|
|
11
12
|
no_tasks do
|
12
13
|
def initialize(repo)
|
@@ -14,14 +15,22 @@ module Onboard
|
|
14
15
|
@g = self.prepare(repo)
|
15
16
|
@path = repo['path']
|
16
17
|
@branch = repo['branch']
|
17
|
-
@
|
18
|
+
@project = repo['project']
|
18
19
|
end
|
19
20
|
|
20
|
-
def st
|
21
|
+
def st(patch = false)
|
21
22
|
changed = []
|
22
23
|
deleted = []
|
23
24
|
untracked = []
|
24
25
|
|
26
|
+
if patch
|
27
|
+
patches_dir = "/tmp/onboard/patches"
|
28
|
+
unless File.directory?(patches_dir)
|
29
|
+
FileUtils.mkdir_p(patches_dir)
|
30
|
+
end
|
31
|
+
patch_file = File.open( "#{patches_dir}/#{Time.now.to_i}_#{project}.patch","w" )
|
32
|
+
end
|
33
|
+
|
25
34
|
# TODO: figure out why g.status.changed.keys.each is returning
|
26
35
|
# unchanged files
|
27
36
|
g.status.changed.keys.each { |file| changed.push(file.to_s) if !g.diff('HEAD', file).patch.empty? }
|
@@ -31,25 +40,53 @@ module Onboard
|
|
31
40
|
|
32
41
|
if changed.empty? == false
|
33
42
|
say('CHANGED FILES:', :yellow)
|
34
|
-
changed.each
|
43
|
+
changed.each do |x|
|
44
|
+
puts g.diff('HEAD', x).patch
|
45
|
+
if patch
|
46
|
+
patch_file << g.diff('HEAD', x).patch
|
47
|
+
end
|
48
|
+
end
|
35
49
|
puts ''
|
36
50
|
end
|
37
51
|
|
38
52
|
if deleted.empty? == false
|
39
53
|
say('DELETED FILES:', :yellow)
|
40
|
-
deleted.each
|
54
|
+
deleted.each do |x|
|
55
|
+
say(x, :red)
|
56
|
+
if patch
|
57
|
+
patch_file << g.diff('--', x).patch
|
58
|
+
end
|
59
|
+
end
|
41
60
|
puts ''
|
42
61
|
end
|
43
62
|
|
44
63
|
if untracked.empty? == false
|
45
64
|
say('UNTRACKED FILES:', :yellow)
|
46
|
-
untracked.each
|
65
|
+
untracked.each do |x|
|
66
|
+
say(x, :red)
|
67
|
+
if patch
|
68
|
+
g.add(x)
|
69
|
+
patch_file << g.diff('HEAD', x).patch
|
70
|
+
end
|
71
|
+
end
|
47
72
|
puts ''
|
48
73
|
end
|
49
74
|
|
75
|
+
if patch
|
76
|
+
patch_file.close
|
77
|
+
Dir.foreach(patches_dir) do |item|
|
78
|
+
file = "#{patches_dir}/#{item}"
|
79
|
+
FileUtils.rm_r file if File.zero?(file)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
50
83
|
return all
|
51
84
|
end
|
52
85
|
|
86
|
+
def co
|
87
|
+
g.checkout_file('HEAD', path)
|
88
|
+
end
|
89
|
+
|
53
90
|
def info
|
54
91
|
repo = {}
|
55
92
|
repo['current_branch'] = g.current_branch
|
@@ -70,7 +107,7 @@ module Onboard
|
|
70
107
|
g.status.untracked.keys.each { |x| changes.push x }
|
71
108
|
|
72
109
|
if changes.empty? == false
|
73
|
-
g.add(
|
110
|
+
g.add(codebase, :all=>true)
|
74
111
|
g.commit("Add #{project}")
|
75
112
|
end
|
76
113
|
|
data/lib/onboard/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathaniel Hoag
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|