Class: Raykit::Git::Directory
- Inherits:
-
Object
- Object
- Raykit::Git::Directory
- Defined in:
- lib/raykit/git/directory.rb
Overview
Functionality to manage a local clone of a git repository
Instance Attribute Summary collapse
-
#directory ⇒ Object
The directory name of the local repository clone.
Instance Method Summary collapse
- #branch ⇒ Object
- #detached? ⇒ Boolean
- #get_sha(filename) ⇒ Object
- #get_tag_commit_id(name) ⇒ Object
- #get_unique_ruby_constants ⇒ Object
- #has_tag(name) ⇒ Object
-
#initialize(directory) ⇒ Directory
constructor
A new instance of Directory.
- #last_modified_src_time ⇒ Object
- #last_modified_time ⇒ Object
-
#latest_tag(_branch) ⇒ Object
The latest tag for a branch of the repository.
- #outstanding_commit? ⇒ Boolean
- #pull ⇒ Object
- #rake(task) ⇒ Object
- #remote ⇒ Object
- #repository ⇒ Object
-
#src_files ⇒ Object
git ls-tree -r master –name-only.
- #tag_version(version) ⇒ Object
- #user_can_commit ⇒ Object
- #user_email ⇒ Object
- #user_name ⇒ Object
Constructor Details
#initialize(directory) ⇒ Directory
Returns a new instance of Directory.
12 13 14 |
# File 'lib/raykit/git/directory.rb', line 12 def initialize(directory) @directory = directory end |
Instance Attribute Details
#directory ⇒ Object
The directory name of the local repository clone
8 9 10 |
# File 'lib/raykit/git/directory.rb', line 8 def directory @directory end |
Instance Method Details
#branch ⇒ Object
150 151 152 153 154 155 156 |
# File 'lib/raykit/git/directory.rb', line 150 def branch Dir.chdir(directory) do scan = `git branch`.scan(/\*\s([\w.-]+)/) return scan[0][0].to_s if !scan.nil? && scan.length.positive? && scan[0].length.positive? end "master" end |
#detached? ⇒ Boolean
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/raykit/git/directory.rb', line 27 def detached? Dir.chdir(directory) do status = `git status`.strip if status.include?("detached") true else false end end end |
#get_sha(filename) ⇒ Object
126 127 128 129 130 131 132 133 |
# File 'lib/raykit/git/directory.rb', line 126 def get_sha(filename) if File.exist?(filename) Digest::SHA256.file(filename).hexdigest.to_s else "#{filename} not found" end # '' end |
#get_tag_commit_id(name) ⇒ Object
108 109 110 111 112 113 114 115 |
# File 'lib/raykit/git/directory.rb', line 108 def get_tag_commit_id(name) cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run if !cmd.output.include?("fatal") && !cmd.error.include?("fatal") cmd.output.strip else "" end end |
#get_unique_ruby_constants ⇒ Object
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/raykit/git/directory.rb', line 185 def get_unique_ruby_constants # Define the regular expression pattern pattern = /\b([A-Z][A-Z0-9_]*)\b\s*=/ constants = [] # Loop through each .rb file in the specified directory Dir.glob("#{directory}/**/*.rb").each do |file| # Read the contents of the file content = File.read(file) # Scan the content for constants and add the matches to the array. content.scan(pattern) do |match| # Add matched constant name to the constants array. constants << match[0] end # Scan the content for constants and add the matches to the array #constants.concat(content.scan(pattern)) end # Return unique constants constants.uniq end |
#has_tag(name) ⇒ Object
117 118 119 120 121 122 123 124 |
# File 'lib/raykit/git/directory.rb', line 117 def has_tag(name) cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run if !cmd.output.include?("fatal") && !cmd.error.include?("fatal") true else false end end |
#last_modified_src_time ⇒ Object
94 95 96 97 98 |
# File 'lib/raykit/git/directory.rb', line 94 def last_modified_src_time Dir.chdir(@directory) do File.mtime(src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }) end end |
#last_modified_time ⇒ Object
76 77 78 79 80 |
# File 'lib/raykit/git/directory.rb', line 76 def last_modified_time Dir.chdir(@directory) do File.mtime(Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }) end end |
#latest_tag(_branch) ⇒ Object
The latest tag for a branch of the repository
101 102 103 104 105 106 |
# File 'lib/raykit/git/directory.rb', line 101 def latest_tag(_branch) Dir.chdir(directory) do return `git describe --abbrev=0`.strip end "" end |
#outstanding_commit? ⇒ Boolean
16 17 18 19 20 21 22 23 24 25 |
# File 'lib/raykit/git/directory.rb', line 16 def outstanding_commit? Dir.chdir(directory) do return false if !File.exist?(".git") if user_can_commit return !`git status`.include?("nothing to commit,") else return false end end end |
#pull ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/raykit/git/directory.rb', line 38 def pull Dir.chdir(directory) do diff = `git diff`.strip status = `git status`.strip PROJECT.run("git pull", false) if diff.length.zero? && status.include?("nothing to commit") end end |
#rake(task) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/raykit/git/directory.rb', line 46 def rake(task) unless Dir.exist?(@directory) puts "directory not found." return 1 end debug = false sub_dir = "work" sub_dir = "make" if @directory.include?("/make/") rake_log = repository.get_dev_dir("log") + "/#{sub_dir}.rake.#{task}.json" puts "log filename #{rake_log}" if debug if File.exist?(rake_log) && (File.mtime(rake_log) > last_modified_time) puts "using logged data" if debug cmd = Raykit::Command.parse(File.read(rake_log)) cmd.summary return end Dir.chdir(@directory) do if File.exist?("rakefile.rb") cmd = Raykit::Command.new("rake #{task}") cmd.summary FileUtils.mkdir_p(File.dirname(rake_log)) File.open(rake_log, "w") { |f| f.write(JSON.generate(cmd.to_hash)) } else puts "rakefile.rb not found" end end end |
#remote ⇒ Object
163 164 165 166 167 168 169 170 |
# File 'lib/raykit/git/directory.rb', line 163 def remote if Dir.exist?(directory) Dir.chdir(directory) do return Command.new("git config --get remote.origin.url").run.output.strip if Dir.exist?(".git") end end "" end |
#repository ⇒ Object
158 159 160 161 |
# File 'lib/raykit/git/directory.rb', line 158 def repository @repository = Raykit::Git::Repository.new(remote) if @repository.nil? @repository end |
#src_files ⇒ Object
git ls-tree -r master –name-only
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/raykit/git/directory.rb', line 83 def src_files files = Array.new Dir.chdir(@directory) do `git ls-tree -r #{branch} --name-only`.each_line { |line| file = line.strip files << file if file.length > 0 } end files end |
#tag_version(version) ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/raykit/git/directory.rb', line 172 def tag_version(version) if has_tag "v#{version}" puts " git tag v#{version} already exists" else if outstanding_commit? raise "outstanding commit, will not tag" else puts " git tag v#{version} does not exist" run("git tag -a v#{version} -m\"version #{version}\"") end end end |
#user_can_commit ⇒ Object
143 144 145 146 147 148 |
# File 'lib/raykit/git/directory.rb', line 143 def user_can_commit return false if user_name.length.zero? return false if user_email.length.zero? true end |
#user_email ⇒ Object
139 140 141 |
# File 'lib/raykit/git/directory.rb', line 139 def user_email `git config --get user.email`.strip end |
#user_name ⇒ Object
135 136 137 |
# File 'lib/raykit/git/directory.rb', line 135 def user_name `git config --get user.name`.strip end |