Commit 71cff252 by Dane Summers

added force option to git - made both subversion and git default to force=true…

added force option to git - made both subversion and git default to force=true for backward compatibility with git's previous behavior
parent 6dd6a4c5
...@@ -45,13 +45,23 @@ def clone(repo, dest): ...@@ -45,13 +45,23 @@ def clone(repo, dest):
rc = cmd.returncode rc = cmd.returncode
return (rc, out, err) return (rc, out, err)
def reset(dest):
def has_local_mods(dest):
os.chdir(dest)
cmd = "git status -s"
lines = os.popen(cmd).read().splitlines()
lines = filter(lambda c: re.search('^\\?\\?.*$',c) == None,lines)
return len(lines) > 0
def reset(module,dest,force):
''' '''
Resets the index and working tree to HEAD. Resets the index and working tree to HEAD.
Discards any changes to tracked files in working Discards any changes to tracked files in working
tree since that commit. tree since that commit.
''' '''
os.chdir(dest) os.chdir(dest)
if not force and has_local_mods(dest):
module.fail_json(msg="Local modifications exist in repository (force=no).")
cmd = "git reset --hard HEAD" cmd = "git reset --hard HEAD"
cmd = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) cmd = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = cmd.communicate() (out, err) = cmd.communicate()
...@@ -140,7 +150,8 @@ def main(): ...@@ -140,7 +150,8 @@ def main():
dest=dict(required=True), dest=dict(required=True),
repo=dict(required=True, aliases=['name']), repo=dict(required=True, aliases=['name']),
version=dict(default='HEAD'), version=dict(default='HEAD'),
remote=dict(default='origin') remote=dict(default='origin'),
force=dict(default='yes', choices=['yes', 'no'], aliases=['force'])
) )
) )
...@@ -148,6 +159,7 @@ def main(): ...@@ -148,6 +159,7 @@ def main():
repo = module.params['repo'] repo = module.params['repo']
version = module.params['version'] version = module.params['version']
remote = module.params['remote'] remote = module.params['remote']
force = module.boolean(module.params['force'])
gitconfig = os.path.join(dest, '.git', 'config') gitconfig = os.path.join(dest, '.git', 'config')
...@@ -156,14 +168,16 @@ def main(): ...@@ -156,14 +168,16 @@ def main():
# if there is no git configuration, do a clone operation # if there is no git configuration, do a clone operation
# else pull and switch the version # else pull and switch the version
before = None before = None
local_mods = False
if not os.path.exists(gitconfig): if not os.path.exists(gitconfig):
(rc, out, err) = clone(repo, dest) (rc, out, err) = clone(repo, dest)
if rc != 0: if rc != 0:
module.fail_json(msg=err) module.fail_json(msg=err)
else: else:
# else do a pull # else do a pull
local_mods = has_local_mods(dest)
before = get_version(dest) before = get_version(dest)
(rc, out, err) = reset(dest) (rc, out, err) = reset(module,dest,force)
if rc != 0: if rc != 0:
module.fail_json(msg=err) module.fail_json(msg=err)
(rc, out, err) = pull(module, repo, dest, version) (rc, out, err) = pull(module, repo, dest, version)
...@@ -182,7 +196,7 @@ def main(): ...@@ -182,7 +196,7 @@ def main():
after = get_version(dest) after = get_version(dest)
changed = False changed = False
if before != after: if before != after or local_mods:
changed = True changed = True
module.exit_json(changed=changed, before=before, after=after) module.exit_json(changed=changed, before=before, after=after)
......
...@@ -54,9 +54,8 @@ def switch(repo, dest): ...@@ -54,9 +54,8 @@ def switch(repo, dest):
def has_local_mods(dest): def has_local_mods(dest):
os.chdir(dest) os.chdir(dest)
cmd = "svn status" cmd = "svn status"
words = os.popen(cmd).read() lines = os.popen(cmd).read().splitlines()
splitup = words.splitlines() filtered = filter(lambda c: re.search('^\\?.*$',c) == None,lines)
filtered = filter(lambda c: re.search('^\\?.*$',c) == None,splitup)
return len(filtered) > 0 return len(filtered) > 0
def reset(dest,force): def reset(dest,force):
...@@ -96,7 +95,7 @@ def main(): ...@@ -96,7 +95,7 @@ def main():
dest=dict(required=True), dest=dict(required=True),
repo=dict(required=True, aliases=['name']), repo=dict(required=True, aliases=['name']),
revision=dict(default='HEAD'), revision=dict(default='HEAD'),
force=dict(default='no', choices=['yes', 'no'], aliases=['force']) force=dict(default='yes', choices=['yes', 'no'], aliases=['force'])
) )
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment