git-tui 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 361705c20ef0c469d7d98b40c1e1ff64d31a68ae8481413a290bfd7de75895be
4
+ data.tar.gz: 317b5228e657913d60a4a591715555d686b8efe97b541112858c34961330ca0c
5
+ SHA512:
6
+ metadata.gz: 4b26a598ecfceb2d0c6ec4cbf26dc00346a391d0b2d9b086289508035e2a5907c263cf2c2dd97839aac331ff8e7923fff9c49089ebbf3066a8f5fc9c7d3d47cb
7
+ data.tar.gz: a3df8dfa310d39bd42060ff4e3935c5833dc041fe761b922f2e0b57ef26b3e01d8c2fab25b0711a1565ec36835dbb63cb6886b32b0e8246a6534b5bc2086305a
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Change Log
2
+
3
+ ## 0.0.1
4
+
5
+ - Initial version with interactive `git checkout branch`
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2022 Andy Maleh
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # Git-TUI (Git Text-based User Interface)
2
+ [![Gem Version](https://badge.fury.io/rb/git-tui.svg)](https://badge.fury.io/rb/git-tui)
3
+
4
+ ![GIT TUI DEMO](git-tui-demo.gif)
5
+
6
+ Other TUI gems you may be interested in:
7
+ - [rake-tui](https://github.com/AndyObtiva/rake-tui)
8
+ - [rvm-tui](https://github.com/AndyObtiva/rvm-tui)
9
+
10
+ ## Pre-requisites
11
+
12
+ - [Git](https://git-scm.com/downloads)
13
+ - [MRI Ruby](https://www.ruby-lang.org/en/) installed via [RVM](https://rvm.io)
14
+ - [Bash](https://www.gnu.org/software/bash/) or [Zsh](http://zsh.sourceforge.net/) (Z Shell) (including Sed)
15
+
16
+ ## Setup Instructions
17
+
18
+ The gem can be installed unto any [Ruby](https://rvm.io/rubies/installing)/[Gemset](https://rvm.io/gemsets/basics) in [RVM](https://rvm.io) and it will be used from there everywhere.
19
+
20
+ Since it is independent of any particular [Ruby](https://www.ruby-lang.org/en/) project, it is recommended you install unto the default [gemset](https://rvm.io/gemsets/basics) (or optionally into its own gemset if you prefer). Global gemset wouldn't be enough to share it since it does not cross Rubies yet is limited to a specific Ruby version.
21
+
22
+ Afterwards, run the `git-tui-setup` command from the same [Ruby](https://rvm.io/rubies/installing)/[Gemset](https://rvm.io/gemsets/basics) you installed the gem at to setup the `git-tui` function source in `~/.bash_profile` or `~/.bashrc` (whichever is available)
23
+
24
+ These are the commands you need to run in order to select a Ruby and gemset, install gem, and finally setup gem commands globablly in the shell environment:
25
+
26
+ ```
27
+ rvm use @default # or a different ruby version/gemset like `rvm use ruby-3.1.0@git-tui --create`
28
+ gem install git-tui
29
+ git-tui-setup
30
+ ```
31
+
32
+ ## Usage
33
+
34
+ Currently, only git branch checkout is supported.
35
+
36
+ Simply run this command:
37
+
38
+ ```
39
+ gitui
40
+ ```
41
+
42
+ Or one of the aliases:
43
+
44
+ ```
45
+ git-ui
46
+ git-tui
47
+ ```
48
+
49
+ ## Contributing
50
+
51
+ - Make sure you have [RVM](https://rvm.io) installed
52
+ - Check out the latest master to make sure the feature hasn't been
53
+ implemented or the bug hasn't been fixed yet.
54
+ - Check out the issue tracker to make sure someone already hasn't
55
+ requested it and/or contributed it.
56
+ - Fork the project.
57
+ - Start a feature/bugfix branch.
58
+ - `bundle`
59
+ - Commit and push until you are happy with your contribution.
60
+ - `rake install` to test (or `rake build`, `rvm use @default`, and then `gem install pkg/git-tui-{version}.gem`)
61
+ - Please try not to mess with the Rakefile, version, or change log. If
62
+ you want to have your own version, or is otherwise necessary, that
63
+ is fine, but please isolate to its own commit so I can cherry-pick
64
+ around it.
65
+
66
+ ## TODO
67
+
68
+ [TODO.md](TODO.md)
69
+
70
+ ## Change Log
71
+
72
+ [CHANGELOG.md](CHANGELOG.md)
73
+
74
+ ## License
75
+
76
+ [MIT](LICENSE.txt)
77
+
78
+ Copyright (c) 2022 Andy Maleh
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/bin/git-tui-setup ADDED
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2022 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ version = File.read(File.expand_path('../../VERSION', __FILE__))
25
+ puts "== git-tui-setup version #{version.strip} =="
26
+
27
+ ruby = `which ruby`
28
+ ruby = `which jruby` if ruby.to_s.strip.empty?
29
+ ruby = ruby.strip
30
+ rvm = `rvm current`.strip
31
+ command = "rvm #{rvm} do #{ruby} #{File.expand_path('../../lib/git-tui.rb', __FILE__)}"
32
+
33
+ git_tui_script = <<~SHELL_SCRIPT
34
+ function git-tui()
35
+ {
36
+ # Load RVM into a shell session *as a function*
37
+ if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
38
+ # First try to load from a user install
39
+ source "$HOME/.rvm/scripts/rvm"
40
+ elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
41
+ # Then try to load from a root install
42
+ source "/usr/local/rvm/scripts/rvm"
43
+ else
44
+ printf "ERROR: An RVM installation was not found.\\n"
45
+ fi
46
+
47
+ current_rvm="$(rvm current)"
48
+ current_ruby="$(echo $current_rvm | sed -E 's/@.*$//')"
49
+ current_gemset="default"
50
+ if [[ $current_rvm == *"@"* ]] ; then
51
+ current_gemset="$(echo $current_rvm | sed -E 's/^[^@]+@//')"
52
+ fi
53
+ #{command} $current_ruby $current_gemset
54
+ if [ -f "$HOME/.git_command" ] ; then
55
+ source $HOME/.git_command > /dev/null
56
+ rm $HOME/.git_command
57
+ fi
58
+ }
59
+ alias gitui=git-tui
60
+ alias git-ui=git-tui
61
+ SHELL_SCRIPT
62
+
63
+ require 'fileutils'
64
+ home_dir = `echo ~`.strip
65
+ FileUtils.mkdir_p("#{home_dir}/bin")
66
+ git_tui_script_file = "#{home_dir}/.git_tui_source"
67
+ git_tui_script_file_bash = "$HOME/.git_tui_source"
68
+ File.write(git_tui_script_file, git_tui_script)
69
+
70
+ [
71
+ ['.bash_profile', '.bashrc'],
72
+ ['.zprofile', '.zshrc']
73
+ ].each do |profile_and_fallback|
74
+ shell_profile_file_name = profile_and_fallback.first
75
+ shell_profile_file_name = profile_and_fallback.last if !File.exist?("#{home_dir}/#{shell_profile_file_name}")
76
+ shell_profile_file = "#{home_dir}/#{shell_profile_file_name}"
77
+ FileUtils.touch(shell_profile_file)
78
+ bash_profile = File.read(shell_profile_file)
79
+ git_tui_source_statement = "source \"#{git_tui_script_file_bash}\""
80
+ unless bash_profile.split("\n").detect {|line| line.include?(git_tui_source_statement) }
81
+ File.write(shell_profile_file, "#{bash_profile}\n#{git_tui_source_statement}")
82
+ end
83
+ puts "~/#{shell_profile_file_name} has been modified to source the `git-tui` function from ~/.git_tui_source"
84
+ end
85
+
86
+ puts <<~OUTPUT
87
+
88
+ Before using `git-tui`, start a new shell session (open a new terminal tab) or run:
89
+
90
+ source ~/.git_tui_source
91
+
92
+ Afterwards, you may run `git-tui` via one of these commands (aliases):
93
+
94
+ git-tui
95
+ git-ui
96
+ gitui
97
+ OUTPUT
data/lib/git-tui.rb ADDED
@@ -0,0 +1,48 @@
1
+ # Copyright (c) 2022 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
23
+
24
+ puts "== git-tui version #{File.read(File.expand_path('../../VERSION', __FILE__)).strip} =="
25
+
26
+ require 'tty-prompt'
27
+
28
+ def clean_branch_name(branch_name)
29
+ branch_name.sub('* ', '').strip
30
+ end
31
+
32
+ git_branch_names = `git branch`.split("\n")
33
+ current_branch = clean_branch_name(git_branch_names.find {|l| l.start_with?('* ')})
34
+ puts "Current Git Branch: #{current_branch}"
35
+
36
+ begin
37
+ prompt = TTY::Prompt.new
38
+ git_branch = prompt.select("Choose Git Branch: ", git_branch_names, cycle: true, per_page: 40, filter: true)
39
+ git_branch = clean_branch_name(git_branch)
40
+
41
+ command = "git checkout #{git_branch}"
42
+
43
+ File.write("#{Dir.home}/.git_command", command)
44
+ rescue TTY::Reader::InputInterrupt => e
45
+ # No Op
46
+ puts # a new line is needed
47
+ puts "Staying at current (abort detected): #{CURRENT_RVM}"
48
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-tui
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - andy_maleh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-01-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tty-prompt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.23.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.23.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 3.5.0
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 3.5.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: rdoc
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.12'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.12'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '1.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '1.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: juwelier
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 2.1.0
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 2.1.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: simplecov
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: puts_debuggerer
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rake-tui
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ description: Git-TUI (Git Text-based User Interface)
132
+ email: andy.am@gmail.com
133
+ executables:
134
+ - git-tui-setup
135
+ extensions: []
136
+ extra_rdoc_files:
137
+ - CHANGELOG.md
138
+ - LICENSE.txt
139
+ - README.md
140
+ files:
141
+ - CHANGELOG.md
142
+ - LICENSE.txt
143
+ - README.md
144
+ - VERSION
145
+ - bin/git-tui-setup
146
+ - lib/git-tui.rb
147
+ homepage: http://github.com/AndyObtiva/git-tui
148
+ licenses:
149
+ - Apache-2.0
150
+ metadata: {}
151
+ post_install_message: |2+
152
+
153
+ To finish setting up the git-tui Ruby gem in your shell environment, run: git-tui-setup
154
+
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ requirements: []
169
+ rubygems_version: 3.3.3
170
+ signing_key:
171
+ specification_version: 4
172
+ summary: Git-TUI (Git Text-based User Interface)
173
+ test_files: []
174
+ ...