gitXplorer 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/gitX +137 -0
- data/bin/gitXplorer +137 -0
- data/bin/gitx +137 -0
- data/bin/gitxplorer +137 -0
- data/lib/git_xplorer/error/invalid_revision.rb +5 -0
- data/lib/git_xplorer/error/no_chaining_allowed.rb +5 -0
- data/lib/git_xplorer/error/no_file_or_directory.rb +5 -0
- data/lib/git_xplorer/error/no_semicolons_allowed.rb +5 -0
- data/lib/git_xplorer/error/no_subshells_allowed.rb +5 -0
- data/lib/git_xplorer/error/not_directory.rb +5 -0
- data/lib/git_xplorer/error/not_file.rb +5 -0
- data/lib/git_xplorer/error.rb +10 -0
- data/lib/git_xplorer/git_object/directory.rb +67 -0
- data/lib/git_xplorer/git_object/file.rb +48 -0
- data/lib/git_xplorer/git_object/revision.rb +21 -0
- data/lib/git_xplorer/git_object.rb +112 -0
- data/lib/git_xplorer/wish/cat_wish.rb +40 -0
- data/lib/git_xplorer/wish/change_directory_wish.rb +44 -0
- data/lib/git_xplorer/wish/find_wish.rb +28 -0
- data/lib/git_xplorer/wish/git_wish.rb +30 -0
- data/lib/git_xplorer/wish/grep_wish.rb +45 -0
- data/lib/git_xplorer/wish/list_directory_wish.rb +93 -0
- data/lib/git_xplorer/wish/pwd_wish.rb +24 -0
- data/lib/git_xplorer/wish/vi_wish.rb +46 -0
- data/lib/git_xplorer.rb +219 -0
- metadata +152 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 46c6a23891882880010d51ef9ff4b9d7d76df67694b8cd744f47cad8cd5b9ee3
|
4
|
+
data.tar.gz: ee9d7cd15d04aa37bda96ed0eaaa6ef6c00a121428ecb9a2f2e532c2edc7dc1e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8e8dcf978ea02cd1b572e76639c92c71e468af9f42621388d033f45bd76810ea6a1ff95040570ed666b404ebd2a6d13df8d53b629b50627535f8fc9d0509bd9c
|
7
|
+
data.tar.gz: 478ecbb30a9ef3eb6cea1559b7b85eb0562be5b598083e695d51c0802bca7364570347850d5ad0f8ea952e760ee3c0641a8b670f1bea90d57b4090457430b3fe
|
data/bin/gitX
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "djinni"
|
4
|
+
require "git_xplorer"
|
5
|
+
require "hilighter"
|
6
|
+
require "io/wait"
|
7
|
+
require "optparse"
|
8
|
+
|
9
|
+
class GitXplorerExit
|
10
|
+
GOOD = 0
|
11
|
+
INVALID_OPTION = 1
|
12
|
+
INVALID_ARGUMENT = 2
|
13
|
+
MISSING_ARGUMENT = 3
|
14
|
+
EXTRA_ARGUMENTS = 4
|
15
|
+
EXCEPTION = 5
|
16
|
+
AMBIGUOUS_ARGUMENT = 6
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse(args)
|
20
|
+
options = Hash.new
|
21
|
+
options["verbose"] = false
|
22
|
+
|
23
|
+
info = [
|
24
|
+
"Drop into a shell-like environment that simulates a",
|
25
|
+
"filesystem. Easily navigate thru directories and browse all",
|
26
|
+
"files across all revisions."
|
27
|
+
].join(" ")
|
28
|
+
|
29
|
+
parser = OptionParser.new do |opts|
|
30
|
+
opts.summary_width = 19
|
31
|
+
|
32
|
+
opts.banner = "Usage: #{File.basename($0)} [OPTIONS]"
|
33
|
+
|
34
|
+
opts.on("")
|
35
|
+
|
36
|
+
info.scan(/\S.{0,80}\S(?=\s|$)|\S+/).each do |line|
|
37
|
+
opts.on("#{line}")
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on("", "OPTIONS")
|
41
|
+
|
42
|
+
opts.on("-h", "--help", "Display this help message") do
|
43
|
+
puts opts
|
44
|
+
exit GitXplorerExit::GOOD
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("--nocolor", "Disable colorized output") do
|
48
|
+
Hilighter.disable
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on(
|
52
|
+
"-v",
|
53
|
+
"--verbose",
|
54
|
+
"Show backtrace when error occurs"
|
55
|
+
) do
|
56
|
+
options["verbose"] = true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
begin
|
61
|
+
parser.parse!(args)
|
62
|
+
rescue OptionParser::InvalidOption => e
|
63
|
+
puts e.message
|
64
|
+
puts parser
|
65
|
+
exit GitXplorerExit::INVALID_OPTION
|
66
|
+
rescue OptionParser::InvalidArgument => e
|
67
|
+
puts e.message
|
68
|
+
puts parser
|
69
|
+
exit GitXplorerExit::INVALID_ARGUMENT
|
70
|
+
rescue OptionParser::MissingArgument => e
|
71
|
+
puts e.message
|
72
|
+
puts parser
|
73
|
+
exit GitXplorerExit::MISSING_ARGUMENT
|
74
|
+
rescue OptionParser::AmbiguousOption => e
|
75
|
+
puts e.message
|
76
|
+
puts parser
|
77
|
+
exit GitXplorerExit::AMBIGUOUS_ARGUMENT
|
78
|
+
end
|
79
|
+
|
80
|
+
if (!args.empty?)
|
81
|
+
puts parser
|
82
|
+
exit GitXplorerExit::EXTRA_ARGUMENTS
|
83
|
+
end
|
84
|
+
|
85
|
+
return options
|
86
|
+
end
|
87
|
+
|
88
|
+
begin
|
89
|
+
options = parse(ARGV)
|
90
|
+
rescue Interrupt
|
91
|
+
# Exit gracefully on ^C
|
92
|
+
exit GitXplorerExit::GOOD
|
93
|
+
end
|
94
|
+
|
95
|
+
begin
|
96
|
+
gitx = GitXplorer.new
|
97
|
+
|
98
|
+
djinni = Djinni.new
|
99
|
+
djinni.fallback = "git"
|
100
|
+
djinni.load_wishes(
|
101
|
+
"#{File.dirname(__FILE__)}/../lib/git_xplorer/wish"
|
102
|
+
)
|
103
|
+
djinni.prompt({"gitXplorer" => gitx}, "#{gitx.pwd}$ ".light_white)
|
104
|
+
rescue SystemExit
|
105
|
+
# Quite from djinni
|
106
|
+
# Exit gracefully
|
107
|
+
rescue Interrupt
|
108
|
+
# Exit gracefully on ^C
|
109
|
+
rescue Errno::EPIPE
|
110
|
+
# Do nothing. This can happen if piping to another program such as
|
111
|
+
# less. Usually if less is closed before we're done with STDOUT.
|
112
|
+
rescue GitXplorer::Error => e
|
113
|
+
puts e.message
|
114
|
+
exit GitXplorerExit::EXCEPTION
|
115
|
+
rescue Exception => e
|
116
|
+
$stderr.puts [
|
117
|
+
"Oops! Looks like an error has occured! If the error",
|
118
|
+
"persists, file a bug at:"
|
119
|
+
].join(" ").wrap
|
120
|
+
$stderr.puts
|
121
|
+
$stderr.puts " https://gitlab.com/mjwhitta/git_xplorer/issues"
|
122
|
+
$stderr.puts
|
123
|
+
$stderr.puts [
|
124
|
+
"Maybe the message below will help. If not, you can use the",
|
125
|
+
"--verbose flag to get a backtrace."
|
126
|
+
].join(" ").wrap
|
127
|
+
$stderr.puts
|
128
|
+
|
129
|
+
$stderr.puts e.message.white.on_red
|
130
|
+
if (options["verbose"])
|
131
|
+
e.backtrace.each do |line|
|
132
|
+
$stderr.puts line.light_yellow
|
133
|
+
end
|
134
|
+
end
|
135
|
+
exit GitXplorerExit::EXCEPTION
|
136
|
+
end
|
137
|
+
exit GitXplorerExit::GOOD
|
data/bin/gitXplorer
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "djinni"
|
4
|
+
require "git_xplorer"
|
5
|
+
require "hilighter"
|
6
|
+
require "io/wait"
|
7
|
+
require "optparse"
|
8
|
+
|
9
|
+
class GitXplorerExit
|
10
|
+
GOOD = 0
|
11
|
+
INVALID_OPTION = 1
|
12
|
+
INVALID_ARGUMENT = 2
|
13
|
+
MISSING_ARGUMENT = 3
|
14
|
+
EXTRA_ARGUMENTS = 4
|
15
|
+
EXCEPTION = 5
|
16
|
+
AMBIGUOUS_ARGUMENT = 6
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse(args)
|
20
|
+
options = Hash.new
|
21
|
+
options["verbose"] = false
|
22
|
+
|
23
|
+
info = [
|
24
|
+
"Drop into a shell-like environment that simulates a",
|
25
|
+
"filesystem. Easily navigate thru directories and browse all",
|
26
|
+
"files across all revisions."
|
27
|
+
].join(" ")
|
28
|
+
|
29
|
+
parser = OptionParser.new do |opts|
|
30
|
+
opts.summary_width = 19
|
31
|
+
|
32
|
+
opts.banner = "Usage: #{File.basename($0)} [OPTIONS]"
|
33
|
+
|
34
|
+
opts.on("")
|
35
|
+
|
36
|
+
info.scan(/\S.{0,80}\S(?=\s|$)|\S+/).each do |line|
|
37
|
+
opts.on("#{line}")
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on("", "OPTIONS")
|
41
|
+
|
42
|
+
opts.on("-h", "--help", "Display this help message") do
|
43
|
+
puts opts
|
44
|
+
exit GitXplorerExit::GOOD
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("--nocolor", "Disable colorized output") do
|
48
|
+
Hilighter.disable
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on(
|
52
|
+
"-v",
|
53
|
+
"--verbose",
|
54
|
+
"Show backtrace when error occurs"
|
55
|
+
) do
|
56
|
+
options["verbose"] = true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
begin
|
61
|
+
parser.parse!(args)
|
62
|
+
rescue OptionParser::InvalidOption => e
|
63
|
+
puts e.message
|
64
|
+
puts parser
|
65
|
+
exit GitXplorerExit::INVALID_OPTION
|
66
|
+
rescue OptionParser::InvalidArgument => e
|
67
|
+
puts e.message
|
68
|
+
puts parser
|
69
|
+
exit GitXplorerExit::INVALID_ARGUMENT
|
70
|
+
rescue OptionParser::MissingArgument => e
|
71
|
+
puts e.message
|
72
|
+
puts parser
|
73
|
+
exit GitXplorerExit::MISSING_ARGUMENT
|
74
|
+
rescue OptionParser::AmbiguousOption => e
|
75
|
+
puts e.message
|
76
|
+
puts parser
|
77
|
+
exit GitXplorerExit::AMBIGUOUS_ARGUMENT
|
78
|
+
end
|
79
|
+
|
80
|
+
if (!args.empty?)
|
81
|
+
puts parser
|
82
|
+
exit GitXplorerExit::EXTRA_ARGUMENTS
|
83
|
+
end
|
84
|
+
|
85
|
+
return options
|
86
|
+
end
|
87
|
+
|
88
|
+
begin
|
89
|
+
options = parse(ARGV)
|
90
|
+
rescue Interrupt
|
91
|
+
# Exit gracefully on ^C
|
92
|
+
exit GitXplorerExit::GOOD
|
93
|
+
end
|
94
|
+
|
95
|
+
begin
|
96
|
+
gitx = GitXplorer.new
|
97
|
+
|
98
|
+
djinni = Djinni.new
|
99
|
+
djinni.fallback = "git"
|
100
|
+
djinni.load_wishes(
|
101
|
+
"#{File.dirname(__FILE__)}/../lib/git_xplorer/wish"
|
102
|
+
)
|
103
|
+
djinni.prompt({"gitXplorer" => gitx}, "#{gitx.pwd}$ ".light_white)
|
104
|
+
rescue SystemExit
|
105
|
+
# Quite from djinni
|
106
|
+
# Exit gracefully
|
107
|
+
rescue Interrupt
|
108
|
+
# Exit gracefully on ^C
|
109
|
+
rescue Errno::EPIPE
|
110
|
+
# Do nothing. This can happen if piping to another program such as
|
111
|
+
# less. Usually if less is closed before we're done with STDOUT.
|
112
|
+
rescue GitXplorer::Error => e
|
113
|
+
puts e.message
|
114
|
+
exit GitXplorerExit::EXCEPTION
|
115
|
+
rescue Exception => e
|
116
|
+
$stderr.puts [
|
117
|
+
"Oops! Looks like an error has occured! If the error",
|
118
|
+
"persists, file a bug at:"
|
119
|
+
].join(" ").wrap
|
120
|
+
$stderr.puts
|
121
|
+
$stderr.puts " https://gitlab.com/mjwhitta/git_xplorer/issues"
|
122
|
+
$stderr.puts
|
123
|
+
$stderr.puts [
|
124
|
+
"Maybe the message below will help. If not, you can use the",
|
125
|
+
"--verbose flag to get a backtrace."
|
126
|
+
].join(" ").wrap
|
127
|
+
$stderr.puts
|
128
|
+
|
129
|
+
$stderr.puts e.message.white.on_red
|
130
|
+
if (options["verbose"])
|
131
|
+
e.backtrace.each do |line|
|
132
|
+
$stderr.puts line.light_yellow
|
133
|
+
end
|
134
|
+
end
|
135
|
+
exit GitXplorerExit::EXCEPTION
|
136
|
+
end
|
137
|
+
exit GitXplorerExit::GOOD
|
data/bin/gitx
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "djinni"
|
4
|
+
require "git_xplorer"
|
5
|
+
require "hilighter"
|
6
|
+
require "io/wait"
|
7
|
+
require "optparse"
|
8
|
+
|
9
|
+
class GitXplorerExit
|
10
|
+
GOOD = 0
|
11
|
+
INVALID_OPTION = 1
|
12
|
+
INVALID_ARGUMENT = 2
|
13
|
+
MISSING_ARGUMENT = 3
|
14
|
+
EXTRA_ARGUMENTS = 4
|
15
|
+
EXCEPTION = 5
|
16
|
+
AMBIGUOUS_ARGUMENT = 6
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse(args)
|
20
|
+
options = Hash.new
|
21
|
+
options["verbose"] = false
|
22
|
+
|
23
|
+
info = [
|
24
|
+
"Drop into a shell-like environment that simulates a",
|
25
|
+
"filesystem. Easily navigate thru directories and browse all",
|
26
|
+
"files across all revisions."
|
27
|
+
].join(" ")
|
28
|
+
|
29
|
+
parser = OptionParser.new do |opts|
|
30
|
+
opts.summary_width = 19
|
31
|
+
|
32
|
+
opts.banner = "Usage: #{File.basename($0)} [OPTIONS]"
|
33
|
+
|
34
|
+
opts.on("")
|
35
|
+
|
36
|
+
info.scan(/\S.{0,80}\S(?=\s|$)|\S+/).each do |line|
|
37
|
+
opts.on("#{line}")
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on("", "OPTIONS")
|
41
|
+
|
42
|
+
opts.on("-h", "--help", "Display this help message") do
|
43
|
+
puts opts
|
44
|
+
exit GitXplorerExit::GOOD
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("--nocolor", "Disable colorized output") do
|
48
|
+
Hilighter.disable
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on(
|
52
|
+
"-v",
|
53
|
+
"--verbose",
|
54
|
+
"Show backtrace when error occurs"
|
55
|
+
) do
|
56
|
+
options["verbose"] = true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
begin
|
61
|
+
parser.parse!(args)
|
62
|
+
rescue OptionParser::InvalidOption => e
|
63
|
+
puts e.message
|
64
|
+
puts parser
|
65
|
+
exit GitXplorerExit::INVALID_OPTION
|
66
|
+
rescue OptionParser::InvalidArgument => e
|
67
|
+
puts e.message
|
68
|
+
puts parser
|
69
|
+
exit GitXplorerExit::INVALID_ARGUMENT
|
70
|
+
rescue OptionParser::MissingArgument => e
|
71
|
+
puts e.message
|
72
|
+
puts parser
|
73
|
+
exit GitXplorerExit::MISSING_ARGUMENT
|
74
|
+
rescue OptionParser::AmbiguousOption => e
|
75
|
+
puts e.message
|
76
|
+
puts parser
|
77
|
+
exit GitXplorerExit::AMBIGUOUS_ARGUMENT
|
78
|
+
end
|
79
|
+
|
80
|
+
if (!args.empty?)
|
81
|
+
puts parser
|
82
|
+
exit GitXplorerExit::EXTRA_ARGUMENTS
|
83
|
+
end
|
84
|
+
|
85
|
+
return options
|
86
|
+
end
|
87
|
+
|
88
|
+
begin
|
89
|
+
options = parse(ARGV)
|
90
|
+
rescue Interrupt
|
91
|
+
# Exit gracefully on ^C
|
92
|
+
exit GitXplorerExit::GOOD
|
93
|
+
end
|
94
|
+
|
95
|
+
begin
|
96
|
+
gitx = GitXplorer.new
|
97
|
+
|
98
|
+
djinni = Djinni.new
|
99
|
+
djinni.fallback = "git"
|
100
|
+
djinni.load_wishes(
|
101
|
+
"#{File.dirname(__FILE__)}/../lib/git_xplorer/wish"
|
102
|
+
)
|
103
|
+
djinni.prompt({"gitXplorer" => gitx}, "#{gitx.pwd}$ ".light_white)
|
104
|
+
rescue SystemExit
|
105
|
+
# Quite from djinni
|
106
|
+
# Exit gracefully
|
107
|
+
rescue Interrupt
|
108
|
+
# Exit gracefully on ^C
|
109
|
+
rescue Errno::EPIPE
|
110
|
+
# Do nothing. This can happen if piping to another program such as
|
111
|
+
# less. Usually if less is closed before we're done with STDOUT.
|
112
|
+
rescue GitXplorer::Error => e
|
113
|
+
puts e.message
|
114
|
+
exit GitXplorerExit::EXCEPTION
|
115
|
+
rescue Exception => e
|
116
|
+
$stderr.puts [
|
117
|
+
"Oops! Looks like an error has occured! If the error",
|
118
|
+
"persists, file a bug at:"
|
119
|
+
].join(" ").wrap
|
120
|
+
$stderr.puts
|
121
|
+
$stderr.puts " https://gitlab.com/mjwhitta/git_xplorer/issues"
|
122
|
+
$stderr.puts
|
123
|
+
$stderr.puts [
|
124
|
+
"Maybe the message below will help. If not, you can use the",
|
125
|
+
"--verbose flag to get a backtrace."
|
126
|
+
].join(" ").wrap
|
127
|
+
$stderr.puts
|
128
|
+
|
129
|
+
$stderr.puts e.message.white.on_red
|
130
|
+
if (options["verbose"])
|
131
|
+
e.backtrace.each do |line|
|
132
|
+
$stderr.puts line.light_yellow
|
133
|
+
end
|
134
|
+
end
|
135
|
+
exit GitXplorerExit::EXCEPTION
|
136
|
+
end
|
137
|
+
exit GitXplorerExit::GOOD
|
data/bin/gitxplorer
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "djinni"
|
4
|
+
require "git_xplorer"
|
5
|
+
require "hilighter"
|
6
|
+
require "io/wait"
|
7
|
+
require "optparse"
|
8
|
+
|
9
|
+
class GitXplorerExit
|
10
|
+
GOOD = 0
|
11
|
+
INVALID_OPTION = 1
|
12
|
+
INVALID_ARGUMENT = 2
|
13
|
+
MISSING_ARGUMENT = 3
|
14
|
+
EXTRA_ARGUMENTS = 4
|
15
|
+
EXCEPTION = 5
|
16
|
+
AMBIGUOUS_ARGUMENT = 6
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse(args)
|
20
|
+
options = Hash.new
|
21
|
+
options["verbose"] = false
|
22
|
+
|
23
|
+
info = [
|
24
|
+
"Drop into a shell-like environment that simulates a",
|
25
|
+
"filesystem. Easily navigate thru directories and browse all",
|
26
|
+
"files across all revisions."
|
27
|
+
].join(" ")
|
28
|
+
|
29
|
+
parser = OptionParser.new do |opts|
|
30
|
+
opts.summary_width = 19
|
31
|
+
|
32
|
+
opts.banner = "Usage: #{File.basename($0)} [OPTIONS]"
|
33
|
+
|
34
|
+
opts.on("")
|
35
|
+
|
36
|
+
info.scan(/\S.{0,80}\S(?=\s|$)|\S+/).each do |line|
|
37
|
+
opts.on("#{line}")
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on("", "OPTIONS")
|
41
|
+
|
42
|
+
opts.on("-h", "--help", "Display this help message") do
|
43
|
+
puts opts
|
44
|
+
exit GitXplorerExit::GOOD
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("--nocolor", "Disable colorized output") do
|
48
|
+
Hilighter.disable
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on(
|
52
|
+
"-v",
|
53
|
+
"--verbose",
|
54
|
+
"Show backtrace when error occurs"
|
55
|
+
) do
|
56
|
+
options["verbose"] = true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
begin
|
61
|
+
parser.parse!(args)
|
62
|
+
rescue OptionParser::InvalidOption => e
|
63
|
+
puts e.message
|
64
|
+
puts parser
|
65
|
+
exit GitXplorerExit::INVALID_OPTION
|
66
|
+
rescue OptionParser::InvalidArgument => e
|
67
|
+
puts e.message
|
68
|
+
puts parser
|
69
|
+
exit GitXplorerExit::INVALID_ARGUMENT
|
70
|
+
rescue OptionParser::MissingArgument => e
|
71
|
+
puts e.message
|
72
|
+
puts parser
|
73
|
+
exit GitXplorerExit::MISSING_ARGUMENT
|
74
|
+
rescue OptionParser::AmbiguousOption => e
|
75
|
+
puts e.message
|
76
|
+
puts parser
|
77
|
+
exit GitXplorerExit::AMBIGUOUS_ARGUMENT
|
78
|
+
end
|
79
|
+
|
80
|
+
if (!args.empty?)
|
81
|
+
puts parser
|
82
|
+
exit GitXplorerExit::EXTRA_ARGUMENTS
|
83
|
+
end
|
84
|
+
|
85
|
+
return options
|
86
|
+
end
|
87
|
+
|
88
|
+
begin
|
89
|
+
options = parse(ARGV)
|
90
|
+
rescue Interrupt
|
91
|
+
# Exit gracefully on ^C
|
92
|
+
exit GitXplorerExit::GOOD
|
93
|
+
end
|
94
|
+
|
95
|
+
begin
|
96
|
+
gitx = GitXplorer.new
|
97
|
+
|
98
|
+
djinni = Djinni.new
|
99
|
+
djinni.fallback = "git"
|
100
|
+
djinni.load_wishes(
|
101
|
+
"#{File.dirname(__FILE__)}/../lib/git_xplorer/wish"
|
102
|
+
)
|
103
|
+
djinni.prompt({"gitXplorer" => gitx}, "#{gitx.pwd}$ ".light_white)
|
104
|
+
rescue SystemExit
|
105
|
+
# Quite from djinni
|
106
|
+
# Exit gracefully
|
107
|
+
rescue Interrupt
|
108
|
+
# Exit gracefully on ^C
|
109
|
+
rescue Errno::EPIPE
|
110
|
+
# Do nothing. This can happen if piping to another program such as
|
111
|
+
# less. Usually if less is closed before we're done with STDOUT.
|
112
|
+
rescue GitXplorer::Error => e
|
113
|
+
puts e.message
|
114
|
+
exit GitXplorerExit::EXCEPTION
|
115
|
+
rescue Exception => e
|
116
|
+
$stderr.puts [
|
117
|
+
"Oops! Looks like an error has occured! If the error",
|
118
|
+
"persists, file a bug at:"
|
119
|
+
].join(" ").wrap
|
120
|
+
$stderr.puts
|
121
|
+
$stderr.puts " https://gitlab.com/mjwhitta/git_xplorer/issues"
|
122
|
+
$stderr.puts
|
123
|
+
$stderr.puts [
|
124
|
+
"Maybe the message below will help. If not, you can use the",
|
125
|
+
"--verbose flag to get a backtrace."
|
126
|
+
].join(" ").wrap
|
127
|
+
$stderr.puts
|
128
|
+
|
129
|
+
$stderr.puts e.message.white.on_red
|
130
|
+
if (options["verbose"])
|
131
|
+
e.backtrace.each do |line|
|
132
|
+
$stderr.puts line.light_yellow
|
133
|
+
end
|
134
|
+
end
|
135
|
+
exit GitXplorerExit::EXCEPTION
|
136
|
+
end
|
137
|
+
exit GitXplorerExit::GOOD
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class GitXplorer::Error < RuntimeError
|
2
|
+
end
|
3
|
+
|
4
|
+
require "git_xplorer/error/invalid_revision"
|
5
|
+
require "git_xplorer/error/no_file_or_directory"
|
6
|
+
require "git_xplorer/error/no_chaining_allowed"
|
7
|
+
require "git_xplorer/error/no_semicolons_allowed"
|
8
|
+
require "git_xplorer/error/no_subshells_allowed"
|
9
|
+
require "git_xplorer/error/not_directory"
|
10
|
+
require "git_xplorer/error/not_file"
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class GitXplorer::GitObject::Directory < GitXplorer::GitObject
|
2
|
+
def absolute_path
|
3
|
+
return "" if (@parent.nil?)
|
4
|
+
return "#{super}/"
|
5
|
+
end
|
6
|
+
|
7
|
+
def add(path)
|
8
|
+
dir, _, file = path.partition("/")
|
9
|
+
if (file.nil? || file.empty?)
|
10
|
+
# Add file
|
11
|
+
file = GitXplorer::GitObject::File.new(dir, self)
|
12
|
+
@files[file.name] = file
|
13
|
+
else
|
14
|
+
# Add subdirectory
|
15
|
+
if (@directories[dir].nil?)
|
16
|
+
directory = GitXplorer::GitObject::Directory.new(
|
17
|
+
dir,
|
18
|
+
self
|
19
|
+
)
|
20
|
+
@directories[dir] = directory
|
21
|
+
end
|
22
|
+
@directories[dir].add(file)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def children
|
27
|
+
if (@kids.nil?)
|
28
|
+
# Initialize
|
29
|
+
@kids = Array.new
|
30
|
+
|
31
|
+
# Get child directories first
|
32
|
+
@kids.concat(
|
33
|
+
@directories.values.sort do |a, b|
|
34
|
+
a.name.downcase <=> b.name.downcase
|
35
|
+
end
|
36
|
+
)
|
37
|
+
|
38
|
+
# Get child files
|
39
|
+
@kids.concat(
|
40
|
+
@files.values.sort do |a, b|
|
41
|
+
a.name.downcase <=> b.name.downcase
|
42
|
+
end
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
return @kids
|
47
|
+
end
|
48
|
+
|
49
|
+
def desc
|
50
|
+
return "Directory"
|
51
|
+
end
|
52
|
+
|
53
|
+
def initialize(name, parent)
|
54
|
+
super(name.gsub(%r{/+$}, ""), parent)
|
55
|
+
@directories = Hash.new
|
56
|
+
@files = Hash.new
|
57
|
+
end
|
58
|
+
|
59
|
+
def tab_complete(color = false)
|
60
|
+
color ||= false
|
61
|
+
return {"#{@name}/" => desc}
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_s
|
65
|
+
return "#{@name}/"
|
66
|
+
end
|
67
|
+
end
|