git_undo 1.0.0 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aac96fa48b02f5d29aaba9d226f71d1b40639258
4
- data.tar.gz: 78a41f2f818f03e83eee4477febdfd96a33bfb36
3
+ metadata.gz: 80b844dbe921e309545c109907cdbf20d345ed89
4
+ data.tar.gz: 85cc2756f7c94e49f9de5d03021daf58df24a24e
5
5
  SHA512:
6
- metadata.gz: fdf1f74895bbb86627a3d98e96d39b14bb6eaed9012b1b9a7e3b3e6ad0af06545c5cdaf6f3afe863b4b2017e74b30f3a11da6e0ff71bc2ba27ccd3c25d4fb7ac
7
- data.tar.gz: 34cebab2965d49e10244d927f0715891d89cd3acb0ce5351d29ae2acf4754782510d562ede8f42284d0289e015c009e625fa2eecc4b234cb2748f7ca448ab9b2
6
+ metadata.gz: d91b8218bfcab8c35a16ff07c1f2683a82d5c2f8e9d041b2f82a99fbd31c6da97bbf2e7aad9c5f76c9cfafd5a1b1576ef2cd6b43c60e845dc0af14dbba54b560
7
+ data.tar.gz: 952b107a5d9e28207d441dd9b7d7e0d563e769640497f9ae18a748710e21f9bad752066408caf7a75093e528aebb4384e3d86497289e454a1fab4d723168cfe5
@@ -1 +1 @@
1
- require_relative '../lib/git_undo/git_manager.rb'
1
+ require_relative '../lib/git_undo.rb'
@@ -0,0 +1,3 @@
1
+ require "git_undo/git_manager"
2
+ require "git_undo/git_reverser"
3
+ require "git_undo/git_setup"
@@ -1,8 +1,4 @@
1
- require 'pry'
2
-
3
1
  class GitManager
4
- VALID_COMMANDS = ['add','commit','merge','checkout','co']
5
-
6
2
  def initialize(history_file)
7
3
  @history_file = history_file
8
4
  @command_list = []
@@ -21,7 +17,7 @@ class GitManager
21
17
  def get_commands
22
18
  File.open(@history_file) do |file|
23
19
  file.each do |line|
24
- # find last git command
20
+ # find all git commands
25
21
  if /\Agit / =~ line
26
22
  @command_list << line.chomp
27
23
  end
@@ -30,16 +26,10 @@ class GitManager
30
26
  end
31
27
 
32
28
  def last_command
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
29
+ @command_list.reverse.detect do |raw_command|
30
+ command = parse_command(raw_command)[:action]
31
+ GitReverser::VALID_COMMANDS.include?(command)
41
32
  end
42
- return last
43
33
  end
44
34
 
45
35
  def parse_command(command)
@@ -50,21 +40,19 @@ class GitManager
50
40
  end
51
41
 
52
42
  def undo_command(action, arguments)
43
+ reverser = GitReverser.new(arguments)
44
+
53
45
  case action
54
46
  when 'add'
55
- "git reset #{arguments}"
47
+ reverser.reverse_add
56
48
  when 'commit'
57
- "git reset --soft HEAD~"
49
+ reverser.reverse_commit
58
50
  when 'merge'
59
- "git reset --merge ORIG_HEAD"
51
+ reverser.reverse_merge
60
52
  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}"
66
- end
67
- undo_command
53
+ reverser.reverse_checkout
54
+ when 'rebase'
55
+ reverser.reverse_rebase
68
56
  end
69
57
  end
70
58
 
@@ -82,5 +70,4 @@ class GitManager
82
70
  end
83
71
  end
84
72
  end
85
-
86
73
  end
@@ -0,0 +1,44 @@
1
+ class GitReverser
2
+ attr_reader :arguments
3
+
4
+ VALID_COMMANDS = ['add','commit','merge','checkout','co', 'rebase']
5
+
6
+ def initialize(arguments)
7
+ @arguments = arguments
8
+ end
9
+
10
+ def reverse_add
11
+ "git reset #{arguments}"
12
+ end
13
+
14
+ def reverse_commit
15
+ 'git reset --soft HEAD~'
16
+ end
17
+
18
+ def reverse_merge
19
+ 'git reset --merge ORIG_HEAD'
20
+ end
21
+
22
+ def reverse_checkout
23
+ undo_command = "git checkout -"
24
+ if arguments.start_with?('-b')
25
+ #also delete branch
26
+ branch_name = arguments.split.last
27
+ undo_command += " && git branch -D #{branch_name}"
28
+ end
29
+ undo_command
30
+ end
31
+
32
+ def reverse_rebase
33
+ if !arguments.include?('-i')
34
+ current_branch_command = 'git rev-parse --abbrev-ref HEAD'
35
+ branch_name = %x[ #{current_branch_command} ].chomp
36
+
37
+ fetch_old_state = "git checkout #{branch_name}@{1}"
38
+ delete_branch = "git branch -D #{branch_name}"
39
+ recreate_branch = "git checkout -b #{branch_name}"
40
+
41
+ "#{fetch_old_state} && #{delete_branch} && #{recreate_branch}"
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,54 @@
1
+ class GitSetup
2
+
3
+ attr_reader :file
4
+
5
+ def initialize
6
+ @file = nil
7
+ end
8
+
9
+ def run
10
+ puts "It looks like you haven't run the initial setup. Would you like to do so now? (y/N)"
11
+ if gets.chomp.downcase == 'y'
12
+ puts "This will involve appending an alias to your .bash_profile. Okay to proceed? (y/N)"
13
+ if gets.chomp.downcase == 'y'
14
+ puts "Thanks!"
15
+ update_bash_profile
16
+ else
17
+ puts "Goodbye!"
18
+ end
19
+ else
20
+ puts "Goodbye!"
21
+ end
22
+ end
23
+
24
+ def update_bash_profile
25
+ @file = File.open(File.expand_path('~' + '/.bash_profile'),'r+')
26
+
27
+ unless alias_exists?
28
+ write_to_bash_profile
29
+ puts "Please run `source ~/.bash_profile && cd .` to reload configuration"
30
+ end
31
+ file.close
32
+ end
33
+
34
+ def alias_exists?
35
+ alias_exists = false
36
+
37
+ file.readlines.each do |line|
38
+ if /\A[\s]*alias/.match line
39
+ if /\A[\s]*alias git-undo="HISTFILE=\$HISTFILE git-undo"\n\z/.match line
40
+ alias_exists = true
41
+ end
42
+ end
43
+ end
44
+
45
+ return alias_exists
46
+ end
47
+
48
+ def write_to_bash_profile
49
+ file.write("# Git Undo\n")
50
+ file.write("alias git-undo=\"HISTFILE=$HISTFILE git-undo\"\n")
51
+ file.write("# Flush history immediately")
52
+ file.write("export PROMPT_COMMAND='history -a")
53
+ end
54
+ end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_undo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.8
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-06-08 00:00:00.000000000 Z
11
+ date: 2016-06-14 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
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Command line utility to read from bash history, find last git command,
@@ -75,9 +75,12 @@ executables:
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - lib/git_undo/git_manager.rb
79
- - config/environment.rb
80
78
  - bin/git-undo
79
+ - config/environment.rb
80
+ - lib/git_undo.rb
81
+ - lib/git_undo/git_manager.rb
82
+ - lib/git_undo/git_reverser.rb
83
+ - lib/git_undo/git_setup.rb
81
84
  homepage: https://github.com/randallreedjr/git_undo
82
85
  licenses:
83
86
  - MIT
@@ -88,17 +91,17 @@ require_paths:
88
91
  - lib
89
92
  required_ruby_version: !ruby/object:Gem::Requirement
90
93
  requirements:
91
- - - '>='
94
+ - - ">="
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  required_rubygems_version: !ruby/object:Gem::Requirement
95
98
  requirements:
96
- - - '>='
99
+ - - ">="
97
100
  - !ruby/object:Gem::Version
98
101
  version: '0'
99
102
  requirements: []
100
103
  rubyforge_project:
101
- rubygems_version: 2.0.14.1
104
+ rubygems_version: 2.4.8
102
105
  signing_key:
103
106
  specification_version: 4
104
107
  summary: Undo last git command