Detect local changes before a git update. See issue #75.

This commit is contained in:
ethicalhack3r
2013-01-13 20:06:20 +01:00
parent 7522a44b0a
commit ecaf0894dd
3 changed files with 30 additions and 0 deletions

View File

@@ -34,6 +34,14 @@ class GitUpdater < Updater
%x[git #{repo_directory_arguments()} pull]
end
def has_local_changes?
%x[git diff --exit-code 2>&1] =~ /diff/ ? true : false
end
def reset_head
%x[git #{repo_directory_arguments()} reset --hard HEAD]
end
protected
def repo_directory_arguments
if @repo_directory

View File

@@ -44,4 +44,22 @@ describe GitUpdater do
@git_updater.update().should === "Already up-to-date."
end
end
describe "#has_local_changes?" do
after :each do
stub_system_command(@git_updater, /^git diff --exit-code 2>&1/, @stub_value)
@git_updater.has_local_changes?.should === @expected
end
it "should return true if there are local changes" do
@stub_value = 'diff'
@expected = true
end
it "should return false if there are no local changes" do
@stub_value = ''
@expected = false
end
end
end

View File

@@ -39,6 +39,10 @@ begin
# Check for updates
if wpscan_options.update
unless @updater.nil?
if @updater.has_local_changes?
puts "#{red('[!]')} Local file changes detected, an update will override local changes, do you want to continue updating? [y/n]"
Readline.readline =~ /^y/i ? @updater.reset_head : raise('Update aborted')
end
puts @updater.update()
else
puts "Svn / Git not installed, or wpscan has not been installed with one of them."