lg_pod_plugin 1.0.2 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lg_pod_plugin/database.rb +6 -6
- data/lib/lg_pod_plugin/download.rb +70 -103
- data/lib/lg_pod_plugin/file_path.rb +8 -4
- data/lib/lg_pod_plugin/git_util.rb +82 -63
- data/lib/lg_pod_plugin/install.rb +60 -89
- data/lib/lg_pod_plugin/l_cache.rb +237 -0
- data/lib/lg_pod_plugin/log.rb +26 -0
- data/lib/lg_pod_plugin/request.rb +141 -0
- data/lib/lg_pod_plugin/string.rb +33 -0
- data/lib/lg_pod_plugin/version.rb +1 -1
- data/lib/lg_pod_plugin.rb +7 -53
- metadata +6 -4
- data/lib/lg_pod_plugin/cache.rb +0 -190
- data/lib/lg_pod_plugin/pod_spec.rb +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e16255ce6cf29df74aa508c022dc083727d4fd78f65d95a0b68b57b10e075767
|
4
|
+
data.tar.gz: f1ac6d11e1cae7f98ee7332aca930d2389b9c07799270755dd8fd1b03a9e1cbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f5dafc9da762041041bd32f38dfe4cc5d1ef399ff5caaf443574f048fc8a14b915b76ae1ec22916ad458a0f53433877ec8301079e725da097e8736c886cee71
|
7
|
+
data.tar.gz: bfc2c0c5835737c9c2cecc3002f61baffcc96ef75057dea47bc7aea9131c1e8df6ca58c54b307e25f8d3b9c5a318b583583586c010952001343f824eb6701813
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require "sqlite3"
|
2
2
|
require 'singleton'
|
3
|
-
require_relative '
|
3
|
+
require_relative 'l_cache'
|
4
4
|
|
5
5
|
module LgPodPlugin
|
6
6
|
|
7
|
-
class
|
7
|
+
class LSqliteDb
|
8
8
|
include Singleton
|
9
9
|
REQUIRED_ATTRS ||= %i[db table_name].freeze
|
10
10
|
attr_accessor(*REQUIRED_ATTRS)
|
11
11
|
# 初始化 db
|
12
12
|
def initialize
|
13
|
-
root_path =
|
13
|
+
root_path = LFileManager.download_director.join("database")
|
14
14
|
db_file_path = root_path.join("my.db")
|
15
15
|
if !root_path.exist? || !db_file_path.exist?
|
16
16
|
FileUtils.mkdir(root_path)
|
@@ -53,7 +53,7 @@ module LgPodPlugin
|
|
53
53
|
self.delete_table(current_pod.name, current_pod.branch)
|
54
54
|
end
|
55
55
|
array = self.select_tables(name, branch)
|
56
|
-
if array.count <=
|
56
|
+
if array.count <= 2
|
57
57
|
return
|
58
58
|
end
|
59
59
|
|
@@ -68,7 +68,7 @@ module LgPodPlugin
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def select_table(name, branch)
|
71
|
-
pod_info =
|
71
|
+
pod_info = LCachePodInfo.new
|
72
72
|
self.db.execute( "select * from #{self.table_name} where name = '#{name}' and branch = '#{branch}'; ") do |row|
|
73
73
|
pod_info.name = row[1]
|
74
74
|
pod_info.branch = row[2]
|
@@ -83,7 +83,7 @@ module LgPodPlugin
|
|
83
83
|
def select_tables(name, branch)
|
84
84
|
array = []
|
85
85
|
self.db.execute( "select * from #{self.table_name} where name = '#{name}' and branch != '#{branch}' order by update_time;") do |row|
|
86
|
-
pod_info =
|
86
|
+
pod_info = LCachePodInfo.new
|
87
87
|
pod_info.name = row[1]
|
88
88
|
pod_info.branch = row[2]
|
89
89
|
pod_info.sha = row[3]
|
@@ -1,22 +1,16 @@
|
|
1
1
|
require 'git'
|
2
|
-
require_relative '
|
3
|
-
require_relative 'database
|
4
|
-
require_relative 'file_path
|
2
|
+
require_relative 'l_cache'
|
3
|
+
require_relative 'database'
|
4
|
+
require_relative 'file_path'
|
5
5
|
|
6
6
|
module LgPodPlugin
|
7
7
|
|
8
|
-
class
|
9
|
-
|
10
|
-
attr_accessor :db
|
11
|
-
attr_accessor :cache
|
8
|
+
class LDownloader
|
9
|
+
|
12
10
|
REQUIRED_ATTRS ||= %i[git name commit branch tag options].freeze
|
13
11
|
attr_accessor(*REQUIRED_ATTRS)
|
14
|
-
|
15
|
-
|
16
|
-
self.db = SqliteDb.instance
|
17
|
-
super
|
18
|
-
end
|
19
|
-
def download_init(name, options = {})
|
12
|
+
|
13
|
+
def initialize(name, options = {})
|
20
14
|
self.name = name
|
21
15
|
self.options = options
|
22
16
|
self.git = options[:git]
|
@@ -24,105 +18,78 @@ module LgPodPlugin
|
|
24
18
|
self.branch = options[:branch]
|
25
19
|
self.commit = options[:commit]
|
26
20
|
end
|
21
|
+
|
22
|
+
# def check_cache_valid(name, branch)
|
23
|
+
# self.db.should_clean_pod_info(name, branch)
|
24
|
+
# end
|
27
25
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
return false
|
33
|
-
end
|
34
|
-
first_key = command_keys[0].to_s ||= ""
|
35
|
-
if first_key.include?("install")
|
36
|
-
false
|
37
|
-
elsif first_key.include?("update")
|
38
|
-
true
|
26
|
+
# 预下载处理
|
27
|
+
def pre_download_pod
|
28
|
+
if self.branch
|
29
|
+
LgPodPlugin.log_green "Using `#{name}` (#{branch})"
|
39
30
|
else
|
40
|
-
|
31
|
+
LgPodPlugin.log_green "Using `#{name}`"
|
41
32
|
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def check_cache_valid(name, branch)
|
45
|
-
self.db.should_clean_pod_info(name, branch)
|
46
|
-
end
|
47
|
-
|
48
|
-
# 预下载处理
|
49
|
-
def pre_download_pod(git)
|
50
|
-
self.git_util = git
|
51
|
-
is_update = self.is_update_pod
|
52
|
-
self.git_util.git_init(self.name, self.options)
|
53
|
-
# if name == "LBase" || name == "LLogger" || name == "LUnityFramework" || name == "LUser"
|
54
|
-
# pp name
|
55
|
-
# end
|
56
|
-
# tag = options[:tag]
|
57
|
-
git_url = options[:git]
|
58
|
-
# commit = options[:commit]
|
59
|
-
branch = options[:branch]
|
60
|
-
LgPodPlugin.log_green "Using `#{name}` (#{branch})"
|
61
33
|
# 发现本地有缓存, 不需要更新缓存
|
62
|
-
need_download
|
63
|
-
|
34
|
+
need_download = LRequest.shared.cache.find_pod_cache(self.name, self.git, self.branch, self.tag, self.commit, LRequest.shared.is_update)
|
35
|
+
if !need_download
|
64
36
|
LgPodPlugin.log_green "find the cache of `#{name}`, you can use it now."
|
65
37
|
return
|
66
|
-
end
|
67
|
-
|
68
|
-
# 检查是否要清空缓存
|
69
|
-
if is_update
|
70
|
-
check_cache_valid(name, branch)
|
71
|
-
end
|
72
|
-
|
73
|
-
# 本地 git 下载 pod 目录
|
74
|
-
pre_down_load_path = self.cache.get_download_path(name, git_url, branch)
|
75
|
-
real_pod_path = self.git_util.pre_download_git_remote(pre_down_load_path, branch)
|
76
|
-
# 本地clone代码失败跳出去
|
77
|
-
unless real_pod_path.exist?
|
78
|
-
return
|
79
|
-
end
|
80
|
-
# 切换到本地git仓库目录下
|
81
|
-
FileUtils.chdir(real_pod_path)
|
82
|
-
unless real_pod_path.glob("*.git")
|
83
|
-
return
|
84
|
-
end
|
85
|
-
# 使用branch克隆代码
|
86
|
-
git = Git.open(Pathname("./"))
|
87
|
-
current_branch = git.current_branch
|
88
|
-
if current_branch == branch # 要 clone 的分支正好等于当前分支
|
89
|
-
current_commit = git.log(1).to_s
|
90
|
-
if new_commit != current_commit && is_update
|
91
|
-
#删除旧的pod 缓存
|
92
|
-
self.cache.clean_old_cache(name, git_url, current_commit)
|
93
|
-
LgPodPlugin.log_green "git pull #{name} origin/#{current_branch}"
|
94
|
-
self.git_util.should_pull(git, current_branch, new_commit)
|
95
|
-
current_commit = new_commit
|
96
|
-
end
|
97
|
-
hash_map = {:git => git_url}
|
98
|
-
if current_commit
|
99
|
-
hash_map[:commit] = current_commit
|
100
|
-
end
|
101
|
-
SqliteDb.instance.insert_table(name, branch, current_commit, nil, real_pod_path)
|
102
|
-
LgPodPlugin::Cache.cache_pod(name,real_pod_path,is_update,hash_map)
|
103
38
|
else
|
104
|
-
|
105
|
-
if branch_exist
|
106
|
-
LgPodPlugin.log_green "git switch #{name} #{git_url} -b #{branch}"
|
107
|
-
self.git_util.git_switch(branch)
|
108
|
-
else
|
109
|
-
LgPodPlugin.log_green "git checkout #{name} #{git_url} -b #{branch}"
|
110
|
-
self.git_util.git_checkout(branch)
|
111
|
-
end
|
112
|
-
current_commit = git.log(1).to_s
|
113
|
-
if current_commit != new_commit
|
114
|
-
LgPodPlugin.log_green "git pull #{name} #{git_url} -b #{branch}"
|
115
|
-
self.git_util.should_pull(git, current_branch, new_commit)
|
116
|
-
current_commit = new_commit
|
117
|
-
end
|
118
|
-
hash_map = {:git => git_url}
|
119
|
-
if current_commit
|
120
|
-
hash_map[:commit] = current_commit
|
121
|
-
end
|
122
|
-
SqliteDb.instance.insert_table(name, branch, current_commit, nil, real_pod_path)
|
123
|
-
LgPodPlugin::Cache.cache_pod(name,real_pod_path,is_update,hash_map)
|
39
|
+
LgPodPlugin.log_green "find the new commit of `#{name}`, Git downloading now."
|
124
40
|
end
|
41
|
+
# 本地 git 下载 pod 目录
|
42
|
+
LRequest.shared.git_util.pre_download_git_repository
|
125
43
|
|
44
|
+
# 本地clone代码失败跳出去
|
45
|
+
# unless real_pod_path.exist?
|
46
|
+
# return
|
47
|
+
# end
|
48
|
+
# # 切换到本地git仓库目录下
|
49
|
+
# FileUtils.chdir(real_pod_path)
|
50
|
+
# unless real_pod_path.glob("*.git")
|
51
|
+
# return
|
52
|
+
# end
|
53
|
+
# # 使用branch克隆代码
|
54
|
+
# git = Git.open(Pathname("./"))
|
55
|
+
# current_branch = git.current_branch
|
56
|
+
# if current_branch == branch # 要 clone 的分支正好等于当前分支
|
57
|
+
# current_commit = git.log(1).to_s
|
58
|
+
# if new_commit != current_commit && is_update
|
59
|
+
# #删除旧的pod 缓存
|
60
|
+
# self.cache.clean_old_cache(name, git_url, current_commit)
|
61
|
+
# LgPodPlugin.log_green "git pull #{name} origin/#{current_branch}"
|
62
|
+
# self.git_util.should_pull(git, current_branch, new_commit)
|
63
|
+
# current_commit = new_commit
|
64
|
+
# end
|
65
|
+
# hash_map = { :git => git_url }
|
66
|
+
# if current_commit
|
67
|
+
# hash_map[:commit] = current_commit
|
68
|
+
# end
|
69
|
+
# LSqliteDb.instance.insert_table(name, branch, current_commit, nil, real_pod_path)
|
70
|
+
# LgPodPlugin::LCache.cache_pod(name, real_pod_path, is_update, hash_map)
|
71
|
+
# else
|
72
|
+
# branch_exist = git.branches.local.find { |e| e.to_s == branch }
|
73
|
+
# if branch_exist
|
74
|
+
# LgPodPlugin.log_green "git switch #{name} #{git_url} -b #{branch}"
|
75
|
+
# self.git_util.git_switch(branch)
|
76
|
+
# else
|
77
|
+
# LgPodPlugin.log_green "git checkout #{name} #{git_url} -b #{branch}"
|
78
|
+
# self.git_util.git_checkout(branch)
|
79
|
+
# end
|
80
|
+
# current_commit = git.log(1).to_s
|
81
|
+
# if current_commit != new_commit
|
82
|
+
# LgPodPlugin.log_green "git pull #{name} #{git_url} -b #{branch}"
|
83
|
+
# self.git_util.should_pull(git, current_branch, new_commit)
|
84
|
+
# current_commit = new_commit
|
85
|
+
# end
|
86
|
+
# hash_map = { :git => git_url }
|
87
|
+
# if current_commit
|
88
|
+
# hash_map[:commit] = current_commit
|
89
|
+
# end
|
90
|
+
# LSqliteDb.instance.insert_table(name, branch, current_commit, nil, real_pod_path)
|
91
|
+
# LgPodPlugin::LCache.cache_pod(name, real_pod_path, is_update, hash_map)
|
92
|
+
# end
|
126
93
|
|
127
94
|
end
|
128
95
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
module LgPodPlugin
|
3
3
|
|
4
|
-
class
|
4
|
+
class LFileManager
|
5
5
|
|
6
6
|
def self.cache_director
|
7
7
|
Pathname(File.join(Dir.home, "Library/Caches"))
|
@@ -9,7 +9,7 @@ module LgPodPlugin
|
|
9
9
|
|
10
10
|
# 本地下载路径 ~Library/Caches/LgPodPlugin
|
11
11
|
def self.download_director
|
12
|
-
cache_path =
|
12
|
+
cache_path = self.cache_director.join("LgPodPlugin")
|
13
13
|
unless cache_path.exist?
|
14
14
|
# pp "文件路径不存在"
|
15
15
|
cache_path.mkdir(0700)
|
@@ -17,8 +17,12 @@ module LgPodPlugin
|
|
17
17
|
cache_path
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
# pod缓存工作目录, 根据项目所在路径计算所得 确保唯一
|
21
|
+
def self.cache_workspace(root)
|
22
|
+
timestamp = "_#{Time.now.to_i}_"
|
23
|
+
key = root.to_path + timestamp + "#{(rand() * 10000000).to_i}"
|
24
|
+
director = Digest::MD5.hexdigest(key)
|
25
|
+
return self.download_director.join(director)
|
22
26
|
end
|
23
27
|
|
24
28
|
end
|
@@ -1,21 +1,16 @@
|
|
1
1
|
require 'pp'
|
2
2
|
require 'git'
|
3
|
+
require_relative 'request'
|
4
|
+
require_relative 'l_cache'
|
3
5
|
|
4
6
|
module LgPodPlugin
|
5
7
|
|
6
|
-
class
|
7
|
-
|
8
|
-
|
9
|
-
attr_accessor
|
10
|
-
attr_accessor :name
|
11
|
-
attr_accessor :commit
|
12
|
-
attr_accessor :branch
|
13
|
-
attr_accessor :temp_git_path
|
14
|
-
def initialize
|
15
|
-
super
|
16
|
-
end
|
8
|
+
class LGitUtil
|
9
|
+
|
10
|
+
REQUIRED_ATTRS ||= %i[git tag path name commit branch].freeze
|
11
|
+
attr_accessor(*REQUIRED_ATTRS)
|
17
12
|
|
18
|
-
def
|
13
|
+
def initialize(name, options = {})
|
19
14
|
self.name = name
|
20
15
|
self.git = options[:git]
|
21
16
|
self.tag = options[:tag]
|
@@ -24,54 +19,62 @@ module LgPodPlugin
|
|
24
19
|
self.commit = options[:commit]
|
25
20
|
end
|
26
21
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
22
|
+
def git_clone_repository(path)
|
23
|
+
FileUtils.chdir(path)
|
24
|
+
temp_name = "lg_temp_pod"
|
25
|
+
if self.git && self.tag
|
26
|
+
LgPodPlugin.log_blue "git clone --tag #{self.tag} #{self.git}"
|
27
|
+
system("git clone --depth=1 -b #{self.tag} #{self.git} #{temp_name}")
|
28
|
+
elsif self.git && self.branch
|
29
|
+
LgPodPlugin.log_blue "git clone --depth=1 --branch #{self.branch} #{self.git}"
|
30
|
+
system("git clone --depth=1 -b #{self.branch} #{self.git} #{temp_name}")
|
31
|
+
elsif self.git && self.commit
|
32
|
+
LgPodPlugin.log_blue "git clone #{self.git}"
|
33
|
+
git = Git.init(temp_name)
|
34
|
+
FileUtils.chdir(temp_name)
|
35
|
+
system("git remote add origin #{self.git}")
|
36
|
+
system("git fetch origin #{self.commit}")
|
37
|
+
system("git reset --hard FETCH_HEAD")
|
35
38
|
end
|
39
|
+
return path.join(temp_name)
|
36
40
|
end
|
37
41
|
|
38
|
-
def git_checkout(branch)
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def git_switch(branch)
|
43
|
-
|
44
|
-
end
|
42
|
+
# def git_checkout(branch)
|
43
|
+
# system("git checkout -b #{branch}")
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# def git_switch(branch)
|
47
|
+
# system("git switch #{branch}")
|
48
|
+
# end
|
45
49
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
def request_params
|
51
|
+
hash_map = {:git => git}
|
52
|
+
if git && tag
|
53
|
+
hash_map[:tag] = tag
|
54
|
+
hash_map[:commit] = self.commit
|
55
|
+
else
|
56
|
+
hash_map[:commit] = commit
|
53
57
|
end
|
58
|
+
return hash_map
|
59
|
+
end
|
54
60
|
|
55
|
-
|
56
|
-
temp_path =
|
61
|
+
def pre_download_git_repository
|
62
|
+
temp_path = LFileManager.download_director.join("temp")
|
57
63
|
if temp_path.exist?
|
58
|
-
FileUtils.
|
64
|
+
FileUtils.rm_rf(temp_path)
|
65
|
+
end
|
66
|
+
lg_pod_path = LRequest.shared.cache.cache_root
|
67
|
+
unless lg_pod_path.exist?
|
68
|
+
lg_pod_path.mkdir(0700)
|
59
69
|
end
|
60
|
-
|
61
|
-
FileUtils.chdir(temp_path)
|
62
|
-
#clone仓库
|
63
|
-
get_temp_folder = git_clone(temp_path)
|
70
|
+
get_temp_folder = git_clone_repository(lg_pod_path)
|
64
71
|
#下载 git 仓库失败
|
65
72
|
unless get_temp_folder.exist?
|
66
73
|
return nil
|
67
74
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
FileUtils.mv(get_temp_folder, lg_pod_path)
|
73
|
-
temp_path.rmdir
|
74
|
-
lg_pod_path
|
75
|
+
LgPodPlugin::LCache.cache_pod(self.name, get_temp_folder, self.request_params)
|
76
|
+
FileUtils.chdir(LFileManager.download_director)
|
77
|
+
FileUtils.rm_rf(lg_pod_path)
|
75
78
|
end
|
76
79
|
|
77
80
|
# 本地pod库git操作
|
@@ -104,29 +107,45 @@ module LgPodPlugin
|
|
104
107
|
end
|
105
108
|
|
106
109
|
# 获取最新的一条 commit 信息
|
107
|
-
def self.git_ls_remote_refs(git, branch)
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
def self.git_ls_remote_refs(git, branch, tag, commit)
|
111
|
+
if branch
|
112
|
+
LgPodPlugin.log_yellow "git ls-remote #{git} #{branch}"
|
113
|
+
new_commit = %x(git ls-remote #{git} #{branch}).split(" ").first
|
114
|
+
return [branch, new_commit]
|
115
|
+
end
|
116
|
+
ls = Git.ls_remote(git, :head => true )
|
117
|
+
if tag
|
118
|
+
map = ls["tags"]
|
119
|
+
keys = map.keys
|
120
|
+
idx = keys.index("#{tag}")
|
121
|
+
unless idx
|
122
|
+
return [nil, nil]
|
123
|
+
end
|
124
|
+
key = keys[idx]
|
125
|
+
new_commit = map[key][:sha]
|
126
|
+
return [nil, new_commit]
|
114
127
|
else
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
128
|
+
new_commit = nil
|
129
|
+
new_branch = nil
|
130
|
+
find_commit = commit ||= ls["head"][:sha]
|
131
|
+
ls["branches"].each do |key, value|
|
132
|
+
sha = value[:sha]
|
133
|
+
next if sha != find_commit
|
134
|
+
new_branch = key
|
135
|
+
new_commit = find_commit
|
136
|
+
return [new_branch, new_commit]
|
137
|
+
break
|
120
138
|
end
|
121
|
-
return
|
139
|
+
return [new_branch , new_commit]
|
122
140
|
end
|
123
141
|
end
|
124
142
|
|
125
143
|
# 是否pull 代码
|
126
144
|
def should_pull(git, branch, new_commit = nil)
|
127
|
-
|
145
|
+
new_barnch = branch ||= self.branch
|
146
|
+
git_url = git.remote.url ||= self.git
|
128
147
|
if new_commit == nil
|
129
|
-
new_commit =
|
148
|
+
new_branch, new_commit = LGitUtil.git_ls_remote_refs(git_url, new_barnch,nil, nil)
|
130
149
|
end
|
131
150
|
local_commit = git.log(1).to_s #本地最后一条 commit hash 值
|
132
151
|
if local_commit != new_commit
|