makit 0.0.1 → 0.0.2

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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/lib/makit/apache.rb +32 -32
  3. data/lib/makit/cli/clean.rb +14 -14
  4. data/lib/makit/cli/clone.rb +59 -59
  5. data/lib/makit/cli/init.rb +38 -38
  6. data/lib/makit/cli/main.rb +33 -33
  7. data/lib/makit/cli/make.rb +54 -54
  8. data/lib/makit/cli/new.rb +37 -37
  9. data/lib/makit/cli/nuget_cache.rb +38 -38
  10. data/lib/makit/cli/pull.rb +31 -31
  11. data/lib/makit/cli/setup.rb +71 -71
  12. data/lib/makit/cli/work.rb +21 -21
  13. data/lib/makit/command_runner.rb +274 -237
  14. data/lib/makit/commands.rb +21 -21
  15. data/lib/makit/content/default_gitignore.rb +5 -5
  16. data/lib/makit/content/default_rakefile.rb +11 -11
  17. data/lib/makit/content/gem_rakefile.rb +14 -14
  18. data/lib/makit/data.rb +50 -50
  19. data/lib/makit/directories.rb +140 -140
  20. data/lib/makit/directory.rb +151 -120
  21. data/lib/makit/dotnet.rb +83 -75
  22. data/lib/makit/environment.rb +123 -123
  23. data/lib/makit/files.rb +47 -47
  24. data/lib/makit/git.rb +66 -66
  25. data/lib/makit/gitlab_runner.rb +60 -60
  26. data/lib/makit/humanize.rb +89 -89
  27. data/lib/makit/logging.rb +96 -96
  28. data/lib/makit/markdown.rb +75 -75
  29. data/lib/makit/mp/basic_object_mp.rb +16 -16
  30. data/lib/makit/mp/command_request.mp.rb +13 -0
  31. data/lib/makit/mp/project_mp.rb +156 -149
  32. data/lib/makit/mp/string_mp.rb +101 -101
  33. data/lib/makit/nuget.rb +57 -57
  34. data/lib/makit/protoc.rb +61 -61
  35. data/lib/makit/serializer.rb +115 -70
  36. data/lib/makit/storage.rb +131 -131
  37. data/lib/makit/symbols.rb +149 -149
  38. data/lib/makit/tasks.rb +67 -67
  39. data/lib/makit/tree.rb +37 -37
  40. data/lib/makit/v1/makit.v1_pb.rb +5 -5
  41. data/lib/makit/v1/makit.v1_services_pb.rb +25 -25
  42. data/lib/makit/version.rb +12 -12
  43. data/lib/makit/wix.rb +95 -95
  44. data/lib/makit/zip.rb +17 -17
  45. data/lib/makit.rb +243 -243
  46. metadata +4 -39
  47. data/.makit.project.json +0 -4
  48. data/.makit.project.yml +0 -2
  49. data/.rubocop.yml +0 -22
  50. data/.ruby-version +0 -1
  51. data/CHANGELOG.md +0 -8
  52. data/CODE_OF_CONDUCT.md +0 -84
  53. data/LICENSE +0 -21
  54. data/README.md +0 -119
  55. data/Rakefile +0 -200
  56. data/docs/Commands.md +0 -50
  57. data/docs_/Commands.md +0 -166
  58. data/docs_/Minitest.Timeouts.md +0 -332
  59. data/examples/protoc/Rakefile +0 -31
  60. data/examples/rake_default/Rakefile +0 -6
  61. data/examples/rubygem-foo/.gitkeep +0 -0
  62. data/examples/rubygem-foo/Rakefile +0 -3
  63. data/examples/run_mp/Rakefile +0 -8
  64. data/exe/makit +0 -5
  65. data/lib/makit/content/default_gitignore.txt +0 -222
  66. data/lib/makit/content/ruby_gitlab-ci.yml +0 -15
  67. data/lib/makit/v1/makit.v1.proto +0 -103
  68. data/makit.generated.sln +0 -30
  69. data/makit.sln +0 -69
  70. data/pages/.gitignore +0 -5
  71. data/pages/404.html +0 -25
  72. data/pages/Gemfile +0 -33
  73. data/pages/Gemfile.lock +0 -88
  74. data/pages/_config.yml +0 -55
  75. data/pages/_layouts/default.html +0 -1
  76. data/pages/_posts/2024-10-05-welcome-to-jekyll.markdown +0 -29
  77. data/pages/about.markdown +0 -18
  78. data/pages/index.markdown +0 -6
  79. data/sig/makit.rbs +0 -4
  80. data/src/ClassLib/Class1.cs +0 -6
  81. data/src/ClassLib/ClassLib.csproj +0 -13
data/lib/makit/data.rb CHANGED
@@ -1,50 +1,50 @@
1
- # frozen_string_literal: true
2
- require "digest"
3
- # This module provides classes for the Makit gem.
4
- module Makit
5
- # This class provide methods for managing persistent data for the makit gem
6
- class Data
7
- attr_accessor :directory, :use_jsonks
8
-
9
- def initialize(attributes = {})
10
- @directory = attributes[:directory] || File.join(Dir.home, ".makit")
11
- @use_json = false
12
- attributes.each do |key, value|
13
- instance_variable_set("@#{key}", value) if self.class.method_defined?("#{key}=")
14
- end
15
- end
16
-
17
- # remove all data
18
- def clear
19
- # remove the data directory
20
- FileUtils.rm_rf(@directory) if Dir.exist?(@directory)
21
- end
22
-
23
- def get_content_id(item)
24
- # get the content id for the item
25
- bytes_string = item.to_proto.bytes.pack("C*") # Convert the byte array to a string
26
- Digest::SHA256.hexdigest(bytes_string)
27
- end
28
-
29
- # save the content
30
- # data.save_content(git_version)
31
- def save(item)
32
- content_id = get_content_id(item)
33
- # save the content
34
- if @use_json
35
- # save the content to a json file
36
- File.open(File.join(@directory, "#{content_id}.json"), "w") do |file|
37
- file.write(item.to_json)
38
- end
39
- end
40
- end
41
-
42
- def get_content(content_id)
43
- nil
44
- end
45
-
46
- def self.gem_db_filename
47
- gem_data_directory = File.join(Dir.home, ".makit", "makit.db")
48
- end
49
- end
50
- end
1
+ # frozen_string_literal: true
2
+ require "digest"
3
+ # This module provides classes for the Makit gem.
4
+ module Makit
5
+ # This class provide methods for managing persistent data for the makit gem
6
+ class Data
7
+ attr_accessor :directory, :use_jsonks
8
+
9
+ def initialize(attributes = {})
10
+ @directory = attributes[:directory] || File.join(Dir.home, ".makit")
11
+ @use_json = false
12
+ attributes.each do |key, value|
13
+ instance_variable_set("@#{key}", value) if self.class.method_defined?("#{key}=")
14
+ end
15
+ end
16
+
17
+ # remove all data
18
+ def clear
19
+ # remove the data directory
20
+ FileUtils.rm_rf(@directory) if Dir.exist?(@directory)
21
+ end
22
+
23
+ def get_content_id(item)
24
+ # get the content id for the item
25
+ bytes_string = item.to_proto.bytes.pack("C*") # Convert the byte array to a string
26
+ Digest::SHA256.hexdigest(bytes_string)
27
+ end
28
+
29
+ # save the content
30
+ # data.save_content(git_version)
31
+ def save(item)
32
+ content_id = get_content_id(item)
33
+ # save the content
34
+ if @use_json
35
+ # save the content to a json file
36
+ File.open(File.join(@directory, "#{content_id}.json"), "w") do |file|
37
+ file.write(item.to_json)
38
+ end
39
+ end
40
+ end
41
+
42
+ def get_content(content_id)
43
+ nil
44
+ end
45
+
46
+ def self.gem_db_filename
47
+ gem_data_directory = File.join(Dir.home, ".makit", "makit.db")
48
+ end
49
+ end
50
+ end
@@ -1,140 +1,140 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "directory"
4
- require_relative "environment"
5
- require_relative "protoc"
6
- require_relative "nuget"
7
- require_relative "version"
8
- require "rake"
9
-
10
- # This module provides classes for the Makit gem.
11
- module Makit
12
- # This class provide methods for working with the system Environment.
13
- #
14
- module Directories
15
- ROOT = File.join(Dir.home, ".makit")
16
- CLONE = File.join(Dir.home, ".makit", "clone")
17
- MAKE = File.join(Dir.home, ".makit", "make")
18
- LOG = File.join(Dir.home, ".makit", "log")
19
- WORK = File.join(Dir.home, ".makit", "work")
20
- REPOS = File.join(Dir.home, ".makit", "repos")
21
- TEMP = File.join(Dir.home, ".makit", "temp")
22
- INSTALL = File.join(Dir.home, ".makit", "install")
23
- HOME = Makit::Directory.normalize(Dir.home)
24
- ONEDRIVE = File.join(Dir.home, "OneDrive")
25
- CURRENT = Dir.pwd
26
- #Rake.application.init
27
- #Rake.application.load_rakefile
28
- RAKEDIR = Dir.pwd #File.dirname(Rake.application.rakefile)
29
-
30
- PROJECT_ROOT = Makit::Directory.find_directory_with_patterns(RAKEDIR, ["Rakefile", "rakefile.rb", ".gitignore"])
31
- #PROJECT_ROOT = Makit::Directory.find_directory_with_pattern(RAKEDIR, "Rakefile")
32
- #PROJECT_ROOT = Makit::Directory.find_directory_with_pattern(RAKEDIR, "rakefile.rb")
33
- #PROJECT_ROOT = Makit::Directory.find_directory_with_pattern(RAKEDIR, ".gitignore")
34
- if (PROJECT_ROOT.nil?)
35
- PROJECT_ARTIFACTS = nil
36
- else
37
- PROJECT_ARTIFACTS = File.join(PROJECT_ROOT, "artifacts")
38
- end
39
- LOCAL_NUGET_SOURCE = File.join(Dir.home, ".makit", "nuget")
40
- if Makit::Environment::get_os == "Windows"
41
- #NUGET_PACKAGE_CACHE = "#{ENV["USERPROFILE"]}\\.nuget\\packages"
42
- NUGET_PACKAGE_CACHE = File.join(HOME, ".nuget", "packages")
43
- SERVICES = File.join("C:", "Program Files")
44
- else
45
- NUGET_PACKAGE_CACHE = Makit::Directory.normalize("#{ENV["HOME"]}/.nuget/packages")
46
- if Makit::Environment::get_os == "macOS"
47
- SERVICES = "/Library/LaunchDaemons"
48
- else
49
- SERVICES = "/etc/systemd/system"
50
- end
51
- end
52
- if Makit::NuGet::get_latest_version("Grpc.Tools").nil?
53
- puts " warning: Grpc.Tools not found in Nuget cache"
54
- else
55
- GRPC_TOOLS_PATH = File.join(NUGET_PACKAGE_CACHE, "grpc.tools", Makit::Protoc::get_latest_grpc_tools_version)
56
- GRPC_CSHARP_PLUGIN_PATH = Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
57
- end
58
-
59
- Dir.mkdir(ROOT) unless Dir.exist?(ROOT)
60
- Dir.mkdir(CLONE) unless Dir.exist?(CLONE)
61
- Dir.mkdir(MAKE) unless Dir.exist?(MAKE)
62
- Dir.mkdir(LOG) unless Dir.exist?(LOG)
63
- Dir.mkdir(WORK) unless Dir.exist?(WORK)
64
- Dir.mkdir(REPOS) unless Dir.exist?(REPOS)
65
- Dir.mkdir(TEMP) unless Dir.exist?(TEMP)
66
- Dir.mkdir(INSTALL) unless Dir.exist?(INSTALL)
67
- if (!Dir.exist?(LOCAL_NUGET_SOURCE))
68
- Dir.mkdir(LOCAL_NUGET_SOURCE)
69
- system("dotnet nuget add source #{LOCAL_NUGET_SOURCE} --name local")
70
- end
71
-
72
- def self.get_project_path(relative_path)
73
- File.join(PROJECT_ROOT, relative_path)
74
- end
75
-
76
- def self.get_clone_directory(url)
77
- File.join(CLONE, get_relative_directory(url))
78
- end
79
-
80
- def self.get_work_directory(url)
81
- File.join(WORK, get_relative_directory(url))
82
- end
83
-
84
- def self.get_make_directory(url)
85
- File.join(MAKE, get_relative_directory(url))
86
- end
87
-
88
- def self.get_make_commit_directory(url, commit_id)
89
- File.join(MAKE, get_relative_directory(url), commit_id)
90
- end
91
-
92
- def self.get_log_directory(url)
93
- File.join(LOG, get_relative_directory(url))
94
- end
95
- def self.get_make_commit_log_filename(url, commit_id)
96
- File.join(LOG, get_relative_directory(url), commit_id + ".json")
97
- end
98
-
99
- def self.get_relative_directory(url)
100
- # if url start with Directories::REPOS, then it is a local repository
101
- if url.start_with?(REPOS)
102
- return url.gsub(REPOS, "")
103
- end
104
- url = url.gsub("https://", "").gsub("http://", "")
105
- url = url.gsub("gitlab.com", "gitlab")
106
- url = url.gsub("github.com", "github")
107
-
108
- # if the url ends with .git, remove it
109
- url = url.gsub(".git", "") if url.end_with?(".git")
110
- url
111
- end
112
-
113
- # show all the directory constants in a nicely formatted table format with the name of the constant and the value
114
- def self.show
115
- # Array of constant names (symbols)
116
- constant_names = [:ROOT, :CLONE, :MAKE, :LOG, :WORK, :REPOS, :TEMP, :INSTALL, :HOME, :ONEDRIVE,
117
- :CURRENT, :RAKEDIR,
118
- :PROJECT_ROOT, :PROJECT_ARTIFACTS, :LOCAL_NUGET_SOURCE, :NUGET_PACKAGE_CACHE, :SERVICES,
119
- :GRPC_TOOLS_PATH, :GRPC_CSHARP_PLUGIN_PATH]
120
-
121
- # Find the length of the longest constant name and add 1
122
- max_length = constant_names.map(&:to_s).max_by(&:length).length + 1
123
-
124
- # Iterate through each constant name
125
- constant_names.each do |constant_name|
126
- begin
127
- constant_value = const_get(constant_name) # Fetch the value of the constant
128
- if (constant_value != nil && Dir.exist?(constant_value))
129
- constant_value = constant_value.colorize(:green)
130
- end
131
- # Print the constant name right justified to the max_length
132
- puts "#{constant_name.to_s.rjust(max_length)} = #{constant_value}"
133
- rescue NameError
134
- # Handle the case where the constant is not defined
135
- puts "#{constant_name.to_s.rjust(max_length)} = [Constant not defined]"
136
- end
137
- end
138
- end
139
- end # end module Directories
140
- end # end module Makit
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "directory"
4
+ require_relative "environment"
5
+ require_relative "protoc"
6
+ require_relative "nuget"
7
+ require_relative "version"
8
+ require "rake"
9
+
10
+ # This module provides classes for the Makit gem.
11
+ module Makit
12
+ # This class provide methods for working with the system Environment.
13
+ #
14
+ module Directories
15
+ ROOT = File.join(Dir.home, ".makit")
16
+ CLONE = File.join(Dir.home, ".makit", "clone")
17
+ MAKE = File.join(Dir.home, ".makit", "make")
18
+ LOG = File.join(Dir.home, ".makit", "log")
19
+ WORK = File.join(Dir.home, ".makit", "work")
20
+ REPOS = File.join(Dir.home, ".makit", "repos")
21
+ TEMP = File.join(Dir.home, ".makit", "temp")
22
+ INSTALL = File.join(Dir.home, ".makit", "install")
23
+ HOME = Makit::Directory.normalize(Dir.home)
24
+ ONEDRIVE = File.join(Dir.home, "OneDrive")
25
+ CURRENT = Dir.pwd
26
+ #Rake.application.init
27
+ #Rake.application.load_rakefile
28
+ RAKEDIR = Dir.pwd #File.dirname(Rake.application.rakefile)
29
+
30
+ PROJECT_ROOT = Makit::Directory.find_directory_with_patterns(RAKEDIR, ["Rakefile", "rakefile.rb", ".gitignore"])
31
+ #PROJECT_ROOT = Makit::Directory.find_directory_with_pattern(RAKEDIR, "Rakefile")
32
+ #PROJECT_ROOT = Makit::Directory.find_directory_with_pattern(RAKEDIR, "rakefile.rb")
33
+ #PROJECT_ROOT = Makit::Directory.find_directory_with_pattern(RAKEDIR, ".gitignore")
34
+ if (PROJECT_ROOT.nil?)
35
+ PROJECT_ARTIFACTS = nil
36
+ else
37
+ PROJECT_ARTIFACTS = File.join(PROJECT_ROOT, "artifacts")
38
+ end
39
+ LOCAL_NUGET_SOURCE = File.join(Dir.home, ".makit", "nuget")
40
+ if Makit::Environment::get_os == "Windows"
41
+ #NUGET_PACKAGE_CACHE = "#{ENV["USERPROFILE"]}\\.nuget\\packages"
42
+ NUGET_PACKAGE_CACHE = File.join(HOME, ".nuget", "packages")
43
+ SERVICES = File.join("C:", "Program Files")
44
+ else
45
+ NUGET_PACKAGE_CACHE = Makit::Directory.normalize("#{ENV["HOME"]}/.nuget/packages")
46
+ if Makit::Environment::get_os == "macOS"
47
+ SERVICES = "/Library/LaunchDaemons"
48
+ else
49
+ SERVICES = "/etc/systemd/system"
50
+ end
51
+ end
52
+ if Makit::NuGet::get_latest_version("Grpc.Tools").nil?
53
+ puts " warning: Grpc.Tools not found in Nuget cache"
54
+ else
55
+ GRPC_TOOLS_PATH = File.join(NUGET_PACKAGE_CACHE, "grpc.tools", Makit::Protoc::get_latest_grpc_tools_version)
56
+ GRPC_CSHARP_PLUGIN_PATH = Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
57
+ end
58
+
59
+ Dir.mkdir(ROOT) unless Dir.exist?(ROOT)
60
+ Dir.mkdir(CLONE) unless Dir.exist?(CLONE)
61
+ Dir.mkdir(MAKE) unless Dir.exist?(MAKE)
62
+ Dir.mkdir(LOG) unless Dir.exist?(LOG)
63
+ Dir.mkdir(WORK) unless Dir.exist?(WORK)
64
+ Dir.mkdir(REPOS) unless Dir.exist?(REPOS)
65
+ Dir.mkdir(TEMP) unless Dir.exist?(TEMP)
66
+ Dir.mkdir(INSTALL) unless Dir.exist?(INSTALL)
67
+ if (!Dir.exist?(LOCAL_NUGET_SOURCE))
68
+ Dir.mkdir(LOCAL_NUGET_SOURCE)
69
+ system("dotnet nuget add source #{LOCAL_NUGET_SOURCE} --name local")
70
+ end
71
+
72
+ def self.get_project_path(relative_path)
73
+ File.join(PROJECT_ROOT, relative_path)
74
+ end
75
+
76
+ def self.get_clone_directory(url)
77
+ File.join(CLONE, get_relative_directory(url))
78
+ end
79
+
80
+ def self.get_work_directory(url)
81
+ File.join(WORK, get_relative_directory(url))
82
+ end
83
+
84
+ def self.get_make_directory(url)
85
+ File.join(MAKE, get_relative_directory(url))
86
+ end
87
+
88
+ def self.get_make_commit_directory(url, commit_id)
89
+ File.join(MAKE, get_relative_directory(url), commit_id)
90
+ end
91
+
92
+ def self.get_log_directory(url)
93
+ File.join(LOG, get_relative_directory(url))
94
+ end
95
+ def self.get_make_commit_log_filename(url, commit_id)
96
+ File.join(LOG, get_relative_directory(url), commit_id + ".json")
97
+ end
98
+
99
+ def self.get_relative_directory(url)
100
+ # if url start with Directories::REPOS, then it is a local repository
101
+ if url.start_with?(REPOS)
102
+ return url.gsub(REPOS, "")
103
+ end
104
+ url = url.gsub("https://", "").gsub("http://", "")
105
+ url = url.gsub("gitlab.com", "gitlab")
106
+ url = url.gsub("github.com", "github")
107
+
108
+ # if the url ends with .git, remove it
109
+ url = url.gsub(".git", "") if url.end_with?(".git")
110
+ url
111
+ end
112
+
113
+ # show all the directory constants in a nicely formatted table format with the name of the constant and the value
114
+ def self.show
115
+ # Array of constant names (symbols)
116
+ constant_names = [:ROOT, :CLONE, :MAKE, :LOG, :WORK, :REPOS, :TEMP, :INSTALL, :HOME, :ONEDRIVE,
117
+ :CURRENT, :RAKEDIR,
118
+ :PROJECT_ROOT, :PROJECT_ARTIFACTS, :LOCAL_NUGET_SOURCE, :NUGET_PACKAGE_CACHE, :SERVICES,
119
+ :GRPC_TOOLS_PATH, :GRPC_CSHARP_PLUGIN_PATH]
120
+
121
+ # Find the length of the longest constant name and add 1
122
+ max_length = constant_names.map(&:to_s).max_by(&:length).length + 1
123
+
124
+ # Iterate through each constant name
125
+ constant_names.each do |constant_name|
126
+ begin
127
+ constant_value = const_get(constant_name) # Fetch the value of the constant
128
+ if (constant_value != nil && Dir.exist?(constant_value))
129
+ constant_value = constant_value.colorize(:green)
130
+ end
131
+ # Print the constant name right justified to the max_length
132
+ puts "#{constant_name.to_s.rjust(max_length)} = #{constant_value}"
133
+ rescue NameError
134
+ # Handle the case where the constant is not defined
135
+ puts "#{constant_name.to_s.rjust(max_length)} = [Constant not defined]"
136
+ end
137
+ end
138
+ end
139
+ end # end module Directories
140
+ end # end module Makit
@@ -1,120 +1,151 @@
1
- # frozen_string_literal: true
2
-
3
- require "find"
4
- require "pathname"
5
- #require "gitignore"
6
-
7
- # This module provides classes for the Makit gem.
8
- module Makit
9
- # This class provide methods for working with Directories/
10
- #
11
- # Example:
12
- #
13
- # Makit::Directory.find_directory_with_pattern("/home/user", "*.rb")
14
- #
15
- class Directory
16
- def self.get_line_count(file)
17
- line_count = 0
18
- File.foreach(file) { line_count += 1 }
19
- line_count
20
- end
21
-
22
- def self.find_directory_with_patterns(starting_directory, patterns)
23
- patterns.each do |pattern|
24
- result = find_directory_with_pattern(starting_directory, pattern)
25
- if (Dir.exist?(result))
26
- return result
27
- end
28
- end
29
-
30
- nil
31
- end
32
-
33
- def self.find_directory_with_pattern(starting_directory, pattern)
34
- current_directory = File.expand_path(starting_directory)
35
-
36
- loop do
37
- return current_directory if contains_pattern?(current_directory, pattern)
38
-
39
- parent_directory = File.dirname(current_directory)
40
- break if parent_directory == current_directory # Reached the root directory
41
-
42
- current_directory = parent_directory
43
- end
44
-
45
- nil
46
- end
47
-
48
- def self.contains_pattern?(directory, pattern)
49
- Dir.foreach(directory) do |entry|
50
- next if [".", ".."].include?(entry)
51
- return true if File.fnmatch(pattern, entry)
52
- end
53
- false
54
- end
55
-
56
- def self.get_size(directory)
57
- total_size = 0
58
-
59
- Find.find(directory) do |file|
60
- total_size += File.size(file) if File.file?(file)
61
- end
62
-
63
- total_size
64
- end
65
-
66
- def self.get_humanized_size(size_in_bytes, precision = 2)
67
- end
68
-
69
- def self.zip_source_files(directory_path, zip_file_name)
70
- raise ArgumentError, "Directory path cannot be nil" if directory_path.nil?
71
- raise ArgumentError, "Zip file name cannot be nil or empty" if zip_file_name.nil? || zip_file_name.strip.empty?
72
-
73
- unless Dir.exist?(directory_path)
74
- raise ArgumentError, "Directory '#{directory_path}' does not exist."
75
- end
76
-
77
- tracked_files = get_git_tracked_files(directory_path)
78
-
79
- if tracked_files.empty?
80
- raise "No tracked files found in the directory."
81
- end
82
-
83
- Zip::File.open(zip_file_name, Zip::File::CREATE) do |zipfile|
84
- tracked_files.each do |file|
85
- full_path = File.join(directory_path, file)
86
- if File.exist?(full_path)
87
- zipfile.add(file, full_path)
88
- end
89
- end
90
- end
91
- end
92
-
93
- def self.get_git_tracked_files(directory_path)
94
- output, status = Open3.capture2("git ls-files", chdir: directory_path)
95
- raise "Failed to list git-tracked files" unless status.success?
96
-
97
- output.split("\n")
98
- end
99
-
100
- # Normalize the path by removing any leading or trailing slashes
101
- # and replacing any backslashes with forward slashes
102
- def self.normalize(path)
103
- path = path.gsub("\\", "/")
104
- #path = path[1..-1] if path.start_with?("/")
105
- path = path[0..-2] if path.end_with?("/")
106
- path
107
- end
108
-
109
- # for a given path, collect all the subdirectories that match a version pattern.
110
- # for example 2.57.0, 2.62, or 2.65.0
111
- def self.get_version_directories(path)
112
- version_directories = []
113
- Dir.foreach(path) do |entry|
114
- next if [".", ".."].include?(entry)
115
- version_directories << entry if entry.match?(/^\d+\.\d+\.\d+$/)
116
- end
117
- version_directories
118
- end
119
- end
120
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "find"
4
+ require "pathname"
5
+ #require "gitignore"
6
+
7
+ # This module provides classes for the Makit gem.
8
+ module Makit
9
+ # This class provide methods for working with Directories/
10
+ #
11
+ # Example:
12
+ #
13
+ # Makit::Directory.find_directory_with_pattern("/home/user", "*.rb")
14
+ #
15
+ class Directory
16
+ def self.get_line_count(file)
17
+ line_count = 0
18
+ File.foreach(file) { line_count += 1 }
19
+ line_count
20
+ end
21
+
22
+ def self.find_directory_with_patterns(starting_directory, patterns)
23
+ patterns.each do |pattern|
24
+ result = find_directory_with_pattern(starting_directory, pattern)
25
+ if (Dir.exist?(result))
26
+ return result
27
+ end
28
+ end
29
+
30
+ nil
31
+ end
32
+
33
+ def self.find_directory_with_pattern(starting_directory, pattern)
34
+ current_directory = File.expand_path(starting_directory)
35
+
36
+ loop do
37
+ return current_directory if contains_pattern?(current_directory, pattern)
38
+
39
+ parent_directory = File.dirname(current_directory)
40
+ break if parent_directory == current_directory # Reached the root directory
41
+
42
+ current_directory = parent_directory
43
+ end
44
+
45
+ nil
46
+ end
47
+
48
+ def self.contains_pattern?(directory, pattern)
49
+ Dir.foreach(directory) do |entry|
50
+ next if [".", ".."].include?(entry)
51
+ return true if File.fnmatch(pattern, entry)
52
+ end
53
+ false
54
+ end
55
+
56
+ def self.get_size(directory)
57
+ total_size = 0
58
+
59
+ Find.find(directory) do |file|
60
+ total_size += File.size(file) if File.file?(file)
61
+ end
62
+
63
+ total_size
64
+ end
65
+
66
+ def self.get_humanized_size(size_in_bytes, precision = 2)
67
+ end
68
+
69
+ def self.zip_source_files(directory_path, zip_file_name)
70
+ raise ArgumentError, "Directory path cannot be nil" if directory_path.nil?
71
+ raise ArgumentError, "Zip file name cannot be nil or empty" if zip_file_name.nil? || zip_file_name.strip.empty?
72
+
73
+ unless Dir.exist?(directory_path)
74
+ raise ArgumentError, "Directory '#{directory_path}' does not exist."
75
+ end
76
+
77
+ tracked_files = get_git_tracked_files(directory_path)
78
+
79
+ if tracked_files.empty?
80
+ raise "No tracked files found in the directory."
81
+ end
82
+
83
+ Zip::File.open(zip_file_name, Zip::File::CREATE) do |zipfile|
84
+ tracked_files.each do |file|
85
+ full_path = File.join(directory_path, file)
86
+ if File.exist?(full_path)
87
+ zipfile.add(file, full_path)
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ def self.get_git_tracked_files(directory_path)
94
+ output, status = Open3.capture2("git ls-files", chdir: directory_path)
95
+ raise "Failed to list git-tracked files" unless status.success?
96
+
97
+ output.split("\n")
98
+ end
99
+
100
+ def self.get_newest_git_file(directory_path)
101
+ get_git_tracked_files(directory_path).select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
102
+ end
103
+
104
+ # Normalize the path by removing any leading or trailing slashes
105
+ # and replacing any backslashes with forward slashes
106
+ def self.normalize(path)
107
+ path = path.gsub("\\", "/")
108
+ #path = path[1..-1] if path.start_with?("/")
109
+ path = path[0..-2] if path.end_with?("/")
110
+ path
111
+ end
112
+
113
+ # for a given path, collect all the subdirectories that match a version pattern.
114
+ # for example 2.57.0, 2.62, or 2.65.0
115
+ def self.get_version_directories(path)
116
+ version_directories = []
117
+ Dir.foreach(path) do |entry|
118
+ next if [".", ".."].include?(entry)
119
+ version_directories << entry if entry.match?(/^\d+\.\d+\.\d+$/)
120
+ end
121
+ version_directories
122
+ end
123
+
124
+ # for a given path, get the most recent file change date for any file in the directory
125
+ def self.get_latest_file_change_date(path)
126
+ # loop over all files in the directory
127
+ latest_date = nil
128
+ Find.find(path) do |file|
129
+ if File.file?(file)
130
+ date = File.mtime(file)
131
+ latest_date = date if latest_date.nil? || date > latest_date
132
+ end
133
+ end
134
+ latest_date
135
+ end
136
+
137
+ # for a given path, return the filename of the most recently modified file
138
+ def self.get_newest_file(path)
139
+ newest_file = nil
140
+ latest_date = nil
141
+ Find.find(path) do |file|
142
+ if File.file?(file)
143
+ date = File.mtime(file)
144
+ latest_date = date if latest_date.nil? || date > latest_date
145
+ newest_file = file if date == latest_date
146
+ end
147
+ end
148
+ newest_file
149
+ end
150
+ end
151
+ end