dorian-git-tree 0.1.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dorian/git/tree.rb +51 -15
  3. metadata +9 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7941d3c1e774c7016afbcd7312e898c8eded0ad1b4351f1d41b19f81dc050e93
4
- data.tar.gz: 0e6f97dd4794c2a99178d4a8c0199da2d6344fd5a9799a9deabc4293e54ccf46
3
+ metadata.gz: 42b9ccf28933c01ec92f8d3b25d01a3f7e5ba10ae20ad481e1b4715351165979
4
+ data.tar.gz: 3b4cbf601a6f870dd5c807358c2d8d34210de77591c2795be9b626d647fd9152
5
5
  SHA512:
6
- metadata.gz: ca8d56279c9344544e0b8da407ce8c9d593ffa9a0feffa16d0aa2d03bb06bb8d5717c10f04c34910740b15abdaf3f56fc4bb81d123c0510eb43f5cf1e05a6be7
7
- data.tar.gz: 5acf0492a1bc1eee0fc957c58f9013da8dcf227d90043d369aa732e247c487b9a430c45954b6169095fa61c2e08392523582ff32b4991238c21e83a3472ac735
6
+ metadata.gz: b44ccdfea86469a67ca44d697a732609671f165cb959dcc50a669a88fc239b6d6244ab477eb6ce01863c8d02a86ee1764099ef224310909fa8fcaea20a907be5
7
+ data.tar.gz: e0379bb8aaa800c98549cb62e6f3acff6ae6feae7d9433ca7078da7ffbdab670286c9fa9dd23b1c0c9cb68f4b5ccba58634fecf42ff132e29e7885ec4d19ff00
@@ -1,28 +1,64 @@
1
- require 'shellwords'
1
+ require "shellwords"
2
2
 
3
3
  module Dorian
4
4
  module Git
5
5
  class Tree
6
+ SPACE = " "
7
+ RIGHT = "└── "
8
+ DOWN = "│   "
9
+ DOWN_AND_RIGHT = "├── "
10
+
6
11
  def self.run
7
- list(ARGV.first || ".")
8
- end
12
+ if ARGV[0] == "--help" || ARGV[0] == "-h" || ARGV.size > 1
13
+ puts "USAGE: git tree [PATH]"
14
+ exit
15
+ end
9
16
 
10
- private
17
+ key = ARGV.first || "."
18
+ files = git_ls_files(key)
19
+ values = group(files)
20
+ key = "#{key}/" if values.any? && key != "." && key[-1] != "/"
21
+ puts key
22
+ values.each.with_index do |(value_key, value_values), value_index|
23
+ print(
24
+ key: value_key,
25
+ values: value_values,
26
+ index: value_index,
27
+ size: values.size,
28
+ )
29
+ end
30
+ end
11
31
 
12
- def self.list(dir, start: true)
13
- puts dir if start
32
+ def self.git_ls_files(path)
33
+ `#{["git", "ls-files", path].compact.shelljoin}`.split("\n")
34
+ end
14
35
 
15
- `git ls-tree HEAD #{Shellwords.escape(dir)} --name-only`.split("\n").sort.each do |line|
16
- split = line.split('/')
17
- puts format(line)
18
- list(line + '/', start: false) if File.directory?(line)
19
- end
36
+ def self.group(files)
37
+ files
38
+ .group_by { |file| file.split("/").first }
39
+ .transform_values do |values|
40
+ group(
41
+ values
42
+ .map { |value| value.split("/")[1..-1].join("/") }
43
+ .reject(&:empty?)
44
+ )
45
+ end
20
46
  end
21
47
 
22
- def self.format(file)
23
- split = file.split('/')
24
- return file unless split.size > 1
25
- "│ " * (split.size - 2) + "└── " + split.last
48
+ def self.print(key:, values:, index: 0, size: 1, prefix: "")
49
+ key = "#{key}/" if values.any?
50
+ last = index + 1 == size
51
+ right_prefix = last ? RIGHT : DOWN_AND_RIGHT
52
+ puts prefix + right_prefix + key
53
+ values.each.with_index do |(value_key, value_values), value_index|
54
+ print(
55
+ key: value_key,
56
+ values: value_values,
57
+ index: value_index,
58
+ size: values.size,
59
+ prefix: prefix + (last ? SPACE : DOWN)
60
+ )
61
+ end
26
62
  end
27
63
  end
28
64
  end
metadata CHANGED
@@ -1,16 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-git-tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-08 00:00:00.000000000 Z
11
+ date: 2021-11-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: e.g. `git-tree config/`
13
+ description: |-
14
+ Lists your files and directories in your git repository as a tree
15
+
16
+ e.g. `git-tree config/`
14
17
  email: dorian@dorianmarie.fr
15
18
  executables:
16
19
  - git-tree
@@ -22,7 +25,8 @@ files:
22
25
  homepage: https://github.com/dorianmariefr/git-tree
23
26
  licenses:
24
27
  - MIT
25
- metadata: {}
28
+ metadata:
29
+ rubygems_mfa_required: 'true'
26
30
  post_install_message:
27
31
  rdoc_options: []
28
32
  require_paths:
@@ -38,7 +42,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
42
  - !ruby/object:Gem::Version
39
43
  version: '0'
40
44
  requirements: []
41
- rubygems_version: 3.2.19
45
+ rubygems_version: 3.2.22
42
46
  signing_key:
43
47
  specification_version: 4
44
48
  summary: Lists your files and directories in your git repository as a tree