git_undo 0.1.0 → 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 +4 -4
- data/bin/{gitundo → git-undo} +1 -1
- data/lib/git_undo/git_manager.rb +56 -42
- metadata +28 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aac96fa48b02f5d29aaba9d226f71d1b40639258
|
4
|
+
data.tar.gz: 78a41f2f818f03e83eee4477febdfd96a33bfb36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdf1f74895bbb86627a3d98e96d39b14bb6eaed9012b1b9a7e3b3e6ad0af06545c5cdaf6f3afe863b4b2017e74b30f3a11da6e0ff71bc2ba27ccd3c25d4fb7ac
|
7
|
+
data.tar.gz: 34cebab2965d49e10244d927f0715891d89cd3acb0ce5351d29ae2acf4754782510d562ede8f42284d0289e015c009e625fa2eecc4b234cb2748f7ca448ab9b2
|
data/bin/{gitundo → git-undo}
RENAMED
data/lib/git_undo/git_manager.rb
CHANGED
@@ -1,9 +1,23 @@
|
|
1
|
+
require 'pry'
|
2
|
+
|
1
3
|
class GitManager
|
4
|
+
VALID_COMMANDS = ['add','commit','merge','checkout','co']
|
5
|
+
|
2
6
|
def initialize(history_file)
|
3
7
|
@history_file = history_file
|
4
8
|
@command_list = []
|
5
9
|
end
|
6
10
|
|
11
|
+
def run
|
12
|
+
get_commands
|
13
|
+
if last_command
|
14
|
+
puts "Last git command was: `#{last_command}`"
|
15
|
+
undo_message(last_command)
|
16
|
+
else
|
17
|
+
puts "No git commands found!"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
7
21
|
def get_commands
|
8
22
|
File.open(@history_file) do |file|
|
9
23
|
file.each do |line|
|
@@ -16,57 +30,57 @@ class GitManager
|
|
16
30
|
end
|
17
31
|
|
18
32
|
def last_command
|
19
|
-
|
33
|
+
last = ''
|
34
|
+
index = @command_list.length - 1
|
35
|
+
while last.empty? && index >= 0
|
36
|
+
command = parse_command(@command_list[index])[:action]
|
37
|
+
if VALID_COMMANDS.include?(command)
|
38
|
+
last = @command_list[index]
|
39
|
+
end
|
40
|
+
index -= 1
|
41
|
+
end
|
42
|
+
return last
|
20
43
|
end
|
21
44
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
45
|
+
def parse_command(command)
|
46
|
+
tokens = command.split(' ')
|
47
|
+
action = tokens[1]
|
48
|
+
arguments = tokens[2..-1].join(' ')
|
49
|
+
return { action: action, arguments: arguments }
|
25
50
|
end
|
26
51
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
52
|
+
def undo_command(action, arguments)
|
53
|
+
case action
|
54
|
+
when 'add'
|
55
|
+
"git reset #{arguments}"
|
56
|
+
when 'commit'
|
57
|
+
"git reset --soft HEAD~"
|
58
|
+
when 'merge'
|
59
|
+
"git reset --merge ORIG_HEAD"
|
60
|
+
when 'checkout','co'
|
61
|
+
undo_command = "git checkout -"
|
62
|
+
if arguments.start_with?('-b')
|
63
|
+
#also delete branch
|
64
|
+
branch_name = arguments.split.last
|
65
|
+
undo_command += " && git branch -D #{branch_name}"
|
36
66
|
end
|
37
|
-
|
38
|
-
puts "Goodbye!"
|
67
|
+
undo_command
|
39
68
|
end
|
40
69
|
end
|
41
70
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
if /\A[\s]*alias/.match line
|
54
|
-
if /\A[\s]*alias gitundo="HISTFILE=\$HISTFILE gitundo"\n\z/.match line
|
55
|
-
alias_exists = true
|
56
|
-
end
|
57
|
-
# max_line_count = line_count
|
58
|
-
# elsif last_line_alias
|
59
|
-
# position = file.pos
|
60
|
-
# last_line_alias = false
|
71
|
+
def undo_message(command)
|
72
|
+
command_hash = parse_command(command)
|
73
|
+
undo = undo_command(command_hash[:action], command_hash[:arguments])
|
74
|
+
if !undo
|
75
|
+
puts "Sorry, I don't know how to undo that command"
|
76
|
+
else
|
77
|
+
puts "To undo, run `#{undo}`\nWould you like to automatically run this command now? (y/N)"
|
78
|
+
option = gets.chomp.downcase
|
79
|
+
if option == 'y'
|
80
|
+
puts undo
|
81
|
+
%x[ #{undo} ]
|
61
82
|
end
|
62
83
|
end
|
63
|
-
unless alias_exists
|
64
|
-
file.write("# Git Undo\n")
|
65
|
-
file.write("alias gitundo=\"HISTFILE=$HISTFILE gitundo\"\n")
|
66
|
-
puts "Please run `source ~/.bash_profile && cd .` to reload configuration"
|
67
|
-
end
|
68
|
-
file.close
|
69
|
-
# puts max_line_count + 1
|
70
|
-
# puts position
|
71
84
|
end
|
85
|
+
|
72
86
|
end
|
metadata
CHANGED
@@ -1,69 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_undo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Randall Reed, Jr.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.11'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Command line utility to read from bash history, find last git command,
|
56
70
|
and output command to undo that operation.
|
57
71
|
email:
|
58
72
|
- randallreedjr@gmail.com
|
59
73
|
executables:
|
60
|
-
-
|
74
|
+
- git-undo
|
61
75
|
extensions: []
|
62
76
|
extra_rdoc_files: []
|
63
77
|
files:
|
64
|
-
- bin/gitundo
|
65
|
-
- config/environment.rb
|
66
78
|
- lib/git_undo/git_manager.rb
|
79
|
+
- config/environment.rb
|
80
|
+
- bin/git-undo
|
67
81
|
homepage: https://github.com/randallreedjr/git_undo
|
68
82
|
licenses:
|
69
83
|
- MIT
|
@@ -74,17 +88,17 @@ require_paths:
|
|
74
88
|
- lib
|
75
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
76
90
|
requirements:
|
77
|
-
- -
|
91
|
+
- - '>='
|
78
92
|
- !ruby/object:Gem::Version
|
79
93
|
version: '0'
|
80
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
95
|
requirements:
|
82
|
-
- -
|
96
|
+
- - '>='
|
83
97
|
- !ruby/object:Gem::Version
|
84
98
|
version: '0'
|
85
99
|
requirements: []
|
86
100
|
rubyforge_project:
|
87
|
-
rubygems_version: 2.
|
101
|
+
rubygems_version: 2.0.14.1
|
88
102
|
signing_key:
|
89
103
|
specification_version: 4
|
90
104
|
summary: Undo last git command
|