raykit 0.0.466 → 0.0.467

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,185 +1,186 @@
1
- # frozen_string_literal: true
2
- module Raykit
3
- module Git
4
- # Functionality to manage a local clone of a git repository
5
- class Directory
6
- # The directory name of the local repository clone
7
- attr_accessor :directory
8
-
9
- @repository
10
-
11
- def initialize(directory)
12
- @directory = directory
13
- end
14
-
15
- def outstanding_commit?
16
- Dir.chdir(directory) do
17
- return false if !File.exist?(".git")
18
- if user_can_commit
19
- return !`git status`.include?("nothing to commit,")
20
- else
21
- return false
22
- end
23
- end
24
- end
25
-
26
- def detached?
27
- Dir.chdir(directory) do
28
- status = `git status`.strip
29
- if status.include?("detached")
30
- true
31
- else
32
- false
33
- end
34
- end
35
- end
36
-
37
- def pull
38
- Dir.chdir(directory) do
39
- diff = `git diff`.strip
40
- status = `git status`.strip
41
- PROJECT.run("git pull", false) if diff.length.zero? && status.include?("nothing to commit")
42
- end
43
- end
44
-
45
- def rake(task)
46
- unless Dir.exist?(@directory)
47
- puts "directory not found."
48
- return 1
49
- end
50
- debug = false
51
- sub_dir = "work"
52
- sub_dir = "make" if @directory.include?("/make/")
53
- rake_log = repository.get_dev_dir("log") + "/#{sub_dir}.rake.#{task}.json"
54
-
55
- puts "log filename #{rake_log}" if debug
56
- if File.exist?(rake_log) && (File.mtime(rake_log) > last_modified_time)
57
- puts "using logged data" if debug
58
- cmd = Raykit::Command.parse(File.read(rake_log))
59
- cmd.summary
60
- return
61
- end
62
-
63
- Dir.chdir(@directory) do
64
- if File.exist?("rakefile.rb")
65
- cmd = Raykit::Command.new("rake #{task}")
66
- cmd.summary
67
- FileUtils.mkdir_p(File.dirname(rake_log))
68
- File.open(rake_log, "w") { |f| f.write(JSON.generate(cmd.to_hash)) }
69
- else
70
- puts "rakefile.rb not found"
71
- end
72
- end
73
- end
74
-
75
- def last_modified_time
76
- Dir.chdir(@directory) do
77
- File.mtime(Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
78
- end
79
- end
80
-
81
- # git ls-tree -r master --name-only
82
- def src_files
83
- files = Array.new
84
- Dir.chdir(@directory) do
85
- `git ls-tree -r #{branch} --name-only`.each_line { |line|
86
- file = line.strip
87
- files << file if file.length > 0
88
- }
89
- end
90
- files
91
- end
92
-
93
- def last_modified_src_time
94
- Dir.chdir(@directory) do
95
- File.mtime(src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
96
- end
97
- end
98
-
99
- # The latest tag for a branch of the repository
100
- def latest_tag(_branch)
101
- Dir.chdir(directory) do
102
- return `git describe --abbrev=0`.strip
103
- end
104
- ""
105
- end
106
-
107
- def get_tag_commit_id(name)
108
- cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
109
- if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
110
- cmd.output.strip
111
- else
112
- ""
113
- end
114
- end
115
-
116
- def has_tag(name)
117
- cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
118
- if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
119
- true
120
- else
121
- false
122
- end
123
- end
124
-
125
- def get_sha(filename)
126
- if File.exist?(filename)
127
- Digest::SHA256.file(filename).hexdigest.to_s
128
- else
129
- "#{filename} not found"
130
- end
131
- # ''
132
- end
133
-
134
- def user_name
135
- `git config --get user.name`.strip
136
- end
137
-
138
- def user_email
139
- `git config --get user.email`.strip
140
- end
141
-
142
- def user_can_commit
143
- return false if user_name.length.zero?
144
- return false if user_email.length.zero?
145
-
146
- true
147
- end
148
-
149
- def branch
150
- Dir.chdir(directory) do
151
- scan = `git branch`.scan(/\*\s([\w.-]+)/)
152
- return scan[0][0].to_s if !scan.nil? && scan.length.positive? && scan[0].length.positive?
153
- end
154
- "main"
155
- end
156
-
157
- def repository
158
- @repository = Raykit::Git::Repository.new(remote) if @repository.nil?
159
- @repository
160
- end
161
-
162
- def remote
163
- if Dir.exist?(directory)
164
- Dir.chdir(directory) do
165
- return Command.new("git config --get remote.origin.url").run.output.strip if Dir.exist?(".git")
166
- end
167
- end
168
- ""
169
- end
170
-
171
- def tag_version(version)
172
- if has_tag "v#{version}"
173
- puts " git tag v#{version} already exists"
174
- else
175
- if outstanding_commit?
176
- raise "outstanding commit, will not tag"
177
- else
178
- puts " git tag v#{version} does not exist"
179
- run("git tag -a v#{version} -m\"version #{version}\"")
180
- end
181
- end
182
- end
183
- end
184
- end
185
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Raykit
4
+ module Git
5
+ # Functionality to manage a local clone of a git repository
6
+ class Directory
7
+ # The directory name of the local repository clone
8
+ attr_accessor :directory
9
+
10
+ @repository
11
+
12
+ def initialize(directory)
13
+ @directory = directory
14
+ end
15
+
16
+ def outstanding_commit?
17
+ Dir.chdir(directory) do
18
+ return false if !File.exist?(".git")
19
+ if user_can_commit
20
+ return !`git status`.include?("nothing to commit,")
21
+ else
22
+ return false
23
+ end
24
+ end
25
+ end
26
+
27
+ def detached?
28
+ Dir.chdir(directory) do
29
+ status = `git status`.strip
30
+ if status.include?("detached")
31
+ true
32
+ else
33
+ false
34
+ end
35
+ end
36
+ end
37
+
38
+ def pull
39
+ Dir.chdir(directory) do
40
+ diff = `git diff`.strip
41
+ status = `git status`.strip
42
+ PROJECT.run("git pull", false) if diff.length.zero? && status.include?("nothing to commit")
43
+ end
44
+ end
45
+
46
+ def rake(task)
47
+ unless Dir.exist?(@directory)
48
+ puts "directory not found."
49
+ return 1
50
+ end
51
+ debug = false
52
+ sub_dir = "work"
53
+ sub_dir = "make" if @directory.include?("/make/")
54
+ rake_log = repository.get_dev_dir("log") + "/#{sub_dir}.rake.#{task}.json"
55
+
56
+ puts "log filename #{rake_log}" if debug
57
+ if File.exist?(rake_log) && (File.mtime(rake_log) > last_modified_time)
58
+ puts "using logged data" if debug
59
+ cmd = Raykit::Command.parse(File.read(rake_log))
60
+ cmd.summary
61
+ return
62
+ end
63
+
64
+ Dir.chdir(@directory) do
65
+ if File.exist?("rakefile.rb")
66
+ cmd = Raykit::Command.new("rake #{task}")
67
+ cmd.summary
68
+ FileUtils.mkdir_p(File.dirname(rake_log))
69
+ File.open(rake_log, "w") { |f| f.write(JSON.generate(cmd.to_hash)) }
70
+ else
71
+ puts "rakefile.rb not found"
72
+ end
73
+ end
74
+ end
75
+
76
+ def last_modified_time
77
+ Dir.chdir(@directory) do
78
+ File.mtime(Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
79
+ end
80
+ end
81
+
82
+ # git ls-tree -r master --name-only
83
+ def src_files
84
+ files = Array.new
85
+ Dir.chdir(@directory) do
86
+ `git ls-tree -r #{branch} --name-only`.each_line { |line|
87
+ file = line.strip
88
+ files << file if file.length > 0
89
+ }
90
+ end
91
+ files
92
+ end
93
+
94
+ def last_modified_src_time
95
+ Dir.chdir(@directory) do
96
+ File.mtime(src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
97
+ end
98
+ end
99
+
100
+ # The latest tag for a branch of the repository
101
+ def latest_tag(_branch)
102
+ Dir.chdir(directory) do
103
+ return `git describe --abbrev=0`.strip
104
+ end
105
+ ""
106
+ end
107
+
108
+ def get_tag_commit_id(name)
109
+ cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
110
+ if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
111
+ cmd.output.strip
112
+ else
113
+ ""
114
+ end
115
+ end
116
+
117
+ def has_tag(name)
118
+ cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
119
+ if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
120
+ true
121
+ else
122
+ false
123
+ end
124
+ end
125
+
126
+ def get_sha(filename)
127
+ if File.exist?(filename)
128
+ Digest::SHA256.file(filename).hexdigest.to_s
129
+ else
130
+ "#{filename} not found"
131
+ end
132
+ # ''
133
+ end
134
+
135
+ def user_name
136
+ `git config --get user.name`.strip
137
+ end
138
+
139
+ def user_email
140
+ `git config --get user.email`.strip
141
+ end
142
+
143
+ def user_can_commit
144
+ return false if user_name.length.zero?
145
+ return false if user_email.length.zero?
146
+
147
+ true
148
+ end
149
+
150
+ def branch
151
+ Dir.chdir(directory) do
152
+ scan = `git branch`.scan(/\*\s([\w.-]+)/)
153
+ return scan[0][0].to_s if !scan.nil? && scan.length.positive? && scan[0].length.positive?
154
+ end
155
+ "master"
156
+ end
157
+
158
+ def repository
159
+ @repository = Raykit::Git::Repository.new(remote) if @repository.nil?
160
+ @repository
161
+ end
162
+
163
+ def remote
164
+ if Dir.exist?(directory)
165
+ Dir.chdir(directory) do
166
+ return Command.new("git config --get remote.origin.url").run.output.strip if Dir.exist?(".git")
167
+ end
168
+ end
169
+ ""
170
+ end
171
+
172
+ def tag_version(version)
173
+ if has_tag "v#{version}"
174
+ puts " git tag v#{version} already exists"
175
+ else
176
+ if outstanding_commit?
177
+ raise "outstanding commit, will not tag"
178
+ else
179
+ puts " git tag v#{version} does not exist"
180
+ run("git tag -a v#{version} -m\"version #{version}\"")
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
@@ -1,46 +1,46 @@
1
- # frozen_string_literal: true
2
-
3
- module Raykit
4
- module Git
5
- # Functionality to manage a local clone of a git repository
6
- class Files
7
- @url
8
- @commit_id
9
-
10
- def initialize(url, commit_id)
11
- @url = url
12
- @commit_id = commit_id
13
- end
14
-
15
- def clean
16
- FileUtils.rm_rf(commit_path) if Dir.exist?(commit_path)
17
- end
18
-
19
- def get(name)
20
- puts "commit_path(): #{commit_path}"
21
- unless Dir.exist?(commit_path)
22
- puts "cloning commit path..."
23
- clone = Raykit::Command.new("git clone #{@url} #{commit_path}")
24
- puts clone.output
25
- puts clone.error
26
- Dir.chdir(commit_path) do
27
- checkout = Raykit::Command.new("git checkout #{@commit_id}")
28
- end
29
- end
30
-
31
- return filename(name) if File.exist?(filename(name))
32
-
33
- ""
34
- end
35
-
36
- def commit_path
37
- Dir.tmpdir + File::SEPARATOR + "Raykit.Git.Files" + File::SEPARATOR + @url.gsub("://",
38
- ".") + File::SEPARATOR + @commit_id
39
- end
40
-
41
- def filename(name)
42
- commit_path + File::SEPARATOR + name
43
- end
44
- end
45
- end
46
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Raykit
4
+ module Git
5
+ # Functionality to manage a local clone of a git repository
6
+ class Files
7
+ @url
8
+ @commit_id
9
+
10
+ def initialize(url, commit_id)
11
+ @url = url
12
+ @commit_id = commit_id
13
+ end
14
+
15
+ def clean
16
+ FileUtils.rm_rf(commit_path) if Dir.exist?(commit_path)
17
+ end
18
+
19
+ def get(name)
20
+ puts "commit_path(): #{commit_path}"
21
+ unless Dir.exist?(commit_path)
22
+ puts "cloning commit path..."
23
+ clone = Raykit::Command.new("git clone #{@url} #{commit_path}")
24
+ puts clone.output
25
+ puts clone.error
26
+ Dir.chdir(commit_path) do
27
+ checkout = Raykit::Command.new("git checkout #{@commit_id}")
28
+ end
29
+ end
30
+
31
+ return filename(name) if File.exist?(filename(name))
32
+
33
+ ""
34
+ end
35
+
36
+ def commit_path
37
+ Dir.tmpdir + File::SEPARATOR + "Raykit.Git.Files" + File::SEPARATOR + @url.gsub("://",
38
+ ".") + File::SEPARATOR + @commit_id
39
+ end
40
+
41
+ def filename(name)
42
+ commit_path + File::SEPARATOR + name
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,89 +1,89 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative("./directory")
4
-
5
- module Raykit
6
- module Git
7
- # Functionality to manage a remote git repository
8
- class Repositories < Array
9
- attr_accessor :filename
10
-
11
- def initialize(filename)
12
- @filename = filename
13
- open(@filename)
14
- end
15
-
16
- def open(filename)
17
- if File.exist?(filename)
18
- JSON.parse(File.read(filename)).each do |url|
19
- insert(-1, url)
20
- end
21
- else
22
- # puts "filename #{filename} does not exist"
23
- end
24
- end
25
-
26
- def save(_filename)
27
- File.open(@filename, "w") do |f|
28
- f.write(JSON.pretty_generate(self))
29
- end
30
- end
31
-
32
- def work_dir
33
- Environment.get_dev_dir("work")
34
- end
35
-
36
- def is_remote_url(pattern)
37
- return true if pattern.include?("http://")
38
- return true if pattern.include?("https://")
39
-
40
- false
41
- end
42
-
43
- def remove(url)
44
- if include?(url)
45
- delete(url)
46
- save(@filename)
47
- end
48
- end
49
-
50
- def import(pattern)
51
- imported = []
52
- if is_remote_url(pattern)
53
- remote = pattern
54
- unless include?(remote)
55
- insert(-1, remote)
56
- imported.insert(-1, remote)
57
- end
58
- else
59
- git_dirs = []
60
- Dir.chdir(work_dir) do
61
- Dir.glob("**/.git") do |git_dir|
62
- dir = File.expand_path("..", git_dir)
63
- git_dirs.insert(0, dir) if dir.length.positive?
64
- end
65
- end
66
-
67
- git_dirs.each do |git_dir|
68
- dir = Raykit::Git::Directory.new(git_dir)
69
- remote = dir.remote
70
- if remote.include?(pattern) && !include?(remote)
71
- insert(-1, remote)
72
- imported.insert(-1, remote)
73
- end
74
- end
75
- end
76
- save(@filename)
77
- imported
78
- end
79
-
80
- def matches(pattern)
81
- matches = []
82
- REPOSITORIES.each do |url|
83
- matches << url if url.include?(pattern)
84
- end
85
- matches
86
- end
87
- end
88
- end
89
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative("./directory")
4
+
5
+ module Raykit
6
+ module Git
7
+ # Functionality to manage a remote git repository
8
+ class Repositories < Array
9
+ attr_accessor :filename
10
+
11
+ def initialize(filename)
12
+ @filename = filename
13
+ open(@filename)
14
+ end
15
+
16
+ def open(filename)
17
+ if File.exist?(filename)
18
+ JSON.parse(File.read(filename)).each do |url|
19
+ insert(-1, url)
20
+ end
21
+ else
22
+ # puts "filename #{filename} does not exist"
23
+ end
24
+ end
25
+
26
+ def save(_filename)
27
+ File.open(@filename, "w") do |f|
28
+ f.write(JSON.pretty_generate(self))
29
+ end
30
+ end
31
+
32
+ def work_dir
33
+ Environment.get_dev_dir("work")
34
+ end
35
+
36
+ def is_remote_url(pattern)
37
+ return true if pattern.include?("http://")
38
+ return true if pattern.include?("https://")
39
+
40
+ false
41
+ end
42
+
43
+ def remove(url)
44
+ if include?(url)
45
+ delete(url)
46
+ save(@filename)
47
+ end
48
+ end
49
+
50
+ def import(pattern)
51
+ imported = []
52
+ if is_remote_url(pattern)
53
+ remote = pattern
54
+ unless include?(remote)
55
+ insert(-1, remote)
56
+ imported.insert(-1, remote)
57
+ end
58
+ else
59
+ git_dirs = []
60
+ Dir.chdir(work_dir) do
61
+ Dir.glob("**/.git") do |git_dir|
62
+ dir = File.expand_path("..", git_dir)
63
+ git_dirs.insert(0, dir) if dir.length.positive?
64
+ end
65
+ end
66
+
67
+ git_dirs.each do |git_dir|
68
+ dir = Raykit::Git::Directory.new(git_dir)
69
+ remote = dir.remote
70
+ if remote.include?(pattern) && !include?(remote)
71
+ insert(-1, remote)
72
+ imported.insert(-1, remote)
73
+ end
74
+ end
75
+ end
76
+ save(@filename)
77
+ imported
78
+ end
79
+
80
+ def matches(pattern)
81
+ matches = []
82
+ REPOSITORIES.each do |url|
83
+ matches << url if url.include?(pattern)
84
+ end
85
+ matches
86
+ end
87
+ end
88
+ end
89
+ end