git_toolbox 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,70 +17,53 @@
17
17
 
18
18
  # frozen_string_literal: true
19
19
 
20
- require 'English'
21
- require 'get/commons/common'
22
- require 'get/commons/git'
23
- require 'get/subcommand/command'
20
+ require_relative '../../commons/common'
21
+ require_relative '../../commons/git'
22
+ require_relative '../command'
24
23
 
25
24
  # Class length is disabled as most of its length is given by formatting.
26
25
  # rubocop:disable Metrics/ClassLength
27
26
  # Subcommand, it allow to create a new repository and add an initial, empty commit to it.
28
27
  class Tree < Command
29
- def self.command
30
- @@command ||= new
31
- @@command
32
- end
33
-
34
- private_class_method :new
35
-
36
28
  private
37
29
 
38
- @@command = nil
39
-
40
- @@usage = 'tree -h|(<subcommand> [<subcommand-options])'
41
- @@description = 'Print the tree of commits.'
42
- @@subcommands = {}
43
- # This block is Optimist configuration. It is as long as the number of options of the command.
44
- # rubocop:disable Metrics/BlockLength
45
- @@option_parser = Optimist::Parser.new do
46
- subcommand_max_length = @@subcommands.keys.map { |k| k.to_s.length }.max
47
- subcommand_section = <<~SUBCOMMANDS unless @@subcommands.empty?
48
- Subcommands:
49
- #{@@subcommands.keys.map { |k| " #{k.to_s.ljust(subcommand_max_length)} => #{@@subcommands[k].description}" }.join("\n")}
50
- SUBCOMMANDS
51
- usage @@usage
52
- synopsis @@description + (subcommand_section.nil? ? '' : "\n") + subcommand_section.to_s
53
- educate_on_error
54
- stop_on @@subcommands.keys.map(&:to_s)
55
- end
56
- # rubocop:enable Metrics/BlockLength
57
-
58
30
  def initialize
59
- super(@@usage, @@description) do
60
- @options = Common.with_subcommand_exception_handling @@option_parser do
61
- @@option_parser.parse
62
- end
63
- Common.error 'tree need to be run inside a git repository' unless Git.in_repo?
64
-
65
- view_tree
31
+ super() do
32
+ @usage = 'tree -h|(<subcommand> [<subcommand-options])'
33
+ @description = 'Print the tree of commits. ' \
34
+ 'If the output is redirected to a pager (i.e. \'less\'), ' \
35
+ 'you may need to enable the parsing of escape sequences.'
36
+ @subcommands = {}
66
37
  end
67
38
  end
68
39
 
69
40
  def view_tree
70
- page_log(transform_log(log))
41
+ puts transform_log(log)
71
42
  end
72
43
 
73
44
  TREE_FORMAT = '%C(bold blue)%h%C(reset)§%C(dim normal)(%cr)%C(reset)§%C(auto)%d%C(reset)§§%n' \
74
45
  '§§§ %C(normal)%an%C(reset)%C(dim normal): %s%C(reset)'
75
46
 
76
47
  def log
77
- `git log --all --graph --decorate=short --date-order --color --pretty=format:"#{TREE_FORMAT}"`
48
+ CommandIssuer.run(
49
+ 'git',
50
+ 'log',
51
+ '--all',
52
+ '--graph',
53
+ '--decorate=short',
54
+ '--date-order',
55
+ '--color',
56
+ "--pretty=format:\"#{TREE_FORMAT}\""
57
+ ).output
78
58
  end
79
59
 
80
60
  TIME_REGEX = /(\([a-z0-9 ,]+\))/
81
61
  TIME_MINIMUM_PADDING = 2
82
62
 
63
+ # rubocop:disable Metrics/MethodLength
83
64
  def transform_log(text)
65
+ return 'This repository has no commit.' if text.empty?
66
+
84
67
  split_lines = text.split("\n").map { |element| element.split('§') }
85
68
  # The first line is always a commit line, so it always have a time reference
86
69
  first_line_time = split_lines.first[1]
@@ -110,9 +93,32 @@ class Tree < Command
110
93
  end
111
94
  .join("\n")
112
95
  end
96
+ # rubocop:enable Metrics/MethodLength
97
+
98
+ protected
99
+
100
+ def setup_option_parser
101
+ @option_parser = Optimist::Parser.new(
102
+ @usage,
103
+ full_description,
104
+ stop_condition
105
+ ) do |usage_header, description, stop_condition|
106
+ usage usage_header
107
+ synopsis description
108
+ educate_on_error
109
+ stop_on stop_condition
110
+ end
111
+ end
112
+
113
+ def setup_action
114
+ @action = lambda do
115
+ @options = Common.with_subcommand_exception_handling @option_parser do
116
+ @option_parser.parse
117
+ end
118
+ Common.error 'tree need to be run inside a git repository' unless Git.in_repo?
113
119
 
114
- def page_log(text)
115
- system("less -RfS <(echo -e '#{text}')")
120
+ view_tree
121
+ end
116
122
  end
117
123
  end
118
124
  # rubocop:enable Metrics/ClassLength
data/lib/get/version.rb CHANGED
@@ -17,6 +17,4 @@
17
17
 
18
18
  # frozen_string_literal: true
19
19
 
20
- module Get
21
- VERSION = '0.7.1'
22
- end
20
+ GET_VERSION = '0.8.0'
data/lib/get.rb CHANGED
@@ -28,48 +28,61 @@ require 'get/subcommand/changelog/changelog'
28
28
  require 'get/subcommand/tree/tree'
29
29
  require 'get/version'
30
30
  require 'get/commons/common'
31
+ require 'get/subcommand/command'
31
32
 
32
- # Entrypoint of Get
33
- module Get
33
+ # Main command of Get.
34
+ class Get < Command
34
35
  class Error < StandardError; end
35
36
 
36
- @@subcommands = {
37
- describe: Describe.command,
38
- commit: Commit.command,
39
- init: Init.command,
40
- license: License.command,
41
- complete: Complete.command,
42
- changelog: Changelog.command,
43
- tree: Tree.command,
44
- }
45
- @@option_parser = Optimist::Parser.new do
46
- subcommand_max_length = @@subcommands.keys.map { |k| k.to_s.length }.max
47
- usage '-h|-v|(<subcommand> [<subcommand-options])'
48
- synopsis <<~SUBCOMMANDS unless @@subcommands.empty?
49
- Subcommands:
50
- #{@@subcommands.keys.map { |k| " #{k.to_s.ljust(subcommand_max_length)} => #{@@subcommands[k].description}" }.join("\n")}
51
- SUBCOMMANDS
52
- version "Get version: #{Get::VERSION}"
53
- educate_on_error
54
- stop_on @@subcommands.keys.map(&:to_s)
37
+ def initialize
38
+ super() do
39
+ @usage = '-h|-v|(<subcommand> [<subcommand-options])'
40
+ @description = ''
41
+ @subcommands = {
42
+ describe: Describe.instance,
43
+ commit: Commit.instance,
44
+ init: Init.instance,
45
+ license: License.instance,
46
+ complete: Complete.instance,
47
+ changelog: Changelog.instance,
48
+ tree: Tree.instance,
49
+ }
50
+ end
55
51
  end
56
52
 
57
- def self.main
58
- @options = Optimist.with_standard_exception_handling(@@option_parser) do
59
- @@option_parser.parse
60
- end
61
- error 'No command or option specified' if ARGV.empty?
62
- command = ARGV.shift.to_sym
63
- if @@subcommands.include?(command)
64
- @@subcommands[command].action.call
65
- else
66
- error "Unknown subcommand '#{command}'"
53
+ def main
54
+ @action.call
55
+ end
56
+
57
+ protected
58
+
59
+ def setup_option_parser
60
+ @option_parser = Optimist::Parser.new(
61
+ @usage,
62
+ full_description,
63
+ GET_VERSION,
64
+ stop_condition
65
+ ) do |usage_header, description, version, stop_condition|
66
+ usage usage_header
67
+ synopsis description
68
+ version "Get version: #{version}"
69
+ educate_on_error
70
+ stop_on stop_condition
67
71
  end
68
72
  end
69
73
 
70
- def self.error(message)
71
- Common.error message do
72
- @@option_parser.educate
74
+ def setup_action
75
+ @action = lambda do
76
+ @options = Optimist.with_standard_exception_handling(@option_parser) do
77
+ @option_parser.parse
78
+ end
79
+ educated_error 'No command or option specified' if ARGV.empty?
80
+ command = ARGV.shift.to_sym
81
+ if @subcommands.include?(command)
82
+ @subcommands[command].action.call
83
+ else
84
+ educated_error "Unknown subcommand '#{command}'"
85
+ end
73
86
  end
74
87
  end
75
88
  end
metadata CHANGED
@@ -1,49 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_toolbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Speranza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-18 00:00:00.000000000 Z
11
+ date: 2023-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: optimist
14
+ name: highline
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 3.0.1
19
+ version: 2.0.3
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '3.0'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 3.0.1
26
+ version: 2.0.3
33
27
  - !ruby/object:Gem::Dependency
34
- name: highline
28
+ name: optimist
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: 2.0.3
33
+ version: '3.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 3.0.1
40
37
  type: :runtime
41
38
  prerelease: false
42
39
  version_requirements: !ruby/object:Gem::Requirement
43
40
  requirements:
44
41
  - - "~>"
45
42
  - !ruby/object:Gem::Version
46
- version: 2.0.3
43
+ version: '3.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 3.0.1
47
47
  description:
48
48
  email:
49
49
  - alex.speranza@studio.unibo.it
@@ -55,8 +55,10 @@ files:
55
55
  - bin/get
56
56
  - bin/setup
57
57
  - lib/get.rb
58
+ - lib/get/commons/command_issuer.rb
58
59
  - lib/get/commons/common.rb
59
60
  - lib/get/commons/git.rb
61
+ - lib/get/commons/http_client.rb
60
62
  - lib/get/subcommand/changelog/changelog.rb
61
63
  - lib/get/subcommand/command.rb
62
64
  - lib/get/subcommand/commit/commit.rb