class Dorian::Git::Tree

Constants

DOWN
DOWN_AND_RIGHT
SPACE

Public Class Methods

git_ls_files(path) click to toggle source
# File lib/dorian/git/tree.rb, line 39
def self.git_ls_files(path)
  result = `#{["git", "ls-files", path].compact.shelljoin}`.split("\n")
  exit $?.exitstatus if $?.exitstatus > 0
  result
end
group(files) click to toggle source
# File lib/dorian/git/tree.rb, line 45
def self.group(files)
  files
    .group_by { |file| file.split("/").first }
    .transform_values do |values|
      group(
        values
          .map { |value| value.split("/")[1..-1].join("/") }
          .reject(&:empty?)
      )
    end
end
print(key:, values:, index: 0, size: 1, prefix: "") click to toggle source
run() click to toggle source
# File lib/dorian/git/tree.rb, line 11
def self.run
  if ARGV[0] == "--help" || ARGV[0] == "-h" || ARGV.size > 1
    puts "USAGE: git tree [PATH]"
    exit
  end

  key = ARGV.first || "."

  files = git_ls_files(key).map do |file|
    ARGV.first ? file.sub(ARGV.first, "") : file
  end

  values = group(files)

  key = "#{key}/" if values.any? && key != "." && key[-1] != "/"

  puts key

  values.each.with_index do |(value_key, value_values), value_index|
    print(
      key: value_key,
      values: value_values,
      index: value_index,
      size: values.size,
    )
  end
end