Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates for git module #300

Merged
merged 2 commits into from
May 3, 2012
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
68 changes: 34 additions & 34 deletions library/git
Original file line number Diff line number Diff line change
Expand Up @@ -32,35 +32,34 @@ import sys
import shlex
import subprocess

# ===========================================
# Basic support methods

def exit_json(rc=0, **kwargs):
print json.dumps(kwargs)
sys.exit(rc)

def fail_json(**kwargs):
kwargs['failed'] = True
exit_json(rc=1, **kwargs)

# ===========================================
# convert arguments of form a=b c=d
# to a dictionary
# FIXME: make more idiomatic

if len(sys.argv) == 1:
print json.dumps({
"failed" : True,
"msg" : "the command module requires arguments (-a)"
})
sys.exit(1)
fail_json(msg="the command module requires arguments (-a)")

argfile = sys.argv[1]
if not os.path.exists(argfile):
print json.dumps({
"failed" : True,
"msg" : "Argument file not found"
})
sys.exit(1)
fail_json(msg="Argument file not found")

args = open(argfile, 'r').read()
items = shlex.split(args)

if not len(items):
print json.dumps({
"failed" : True,
"msg" : "the command module requires arguments (-a)"
})
sys.exit(1)
fail_json(msg="the command module requires arguments (-a)")

params = {}
for x in items:
Expand All @@ -69,7 +68,7 @@ for x in items:

dest = params['dest']
repo = params['repo']
version = params['version']
version = params.get('version', 'HEAD')

# ===========================================

Expand All @@ -91,6 +90,19 @@ def clone(repo, dest):
cmd = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return cmd.communicate()

def reset(dest):
'''
Resets the index and working tree to HEAD.
Discards any changes to tracked files in working
tree since that commit.
'''
os.chdir(dest)
cmd = "git reset --hard HEAD"
cmd = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = cmd.communicate()
rc = cmd.returncode
return (rc, out, err)

def pull(repo, dest):
''' updates repo from remote sources '''
os.chdir(dest)
Expand Down Expand Up @@ -124,29 +136,22 @@ if not os.path.exists(gitconfig):
else:
# else do a pull
before = get_version(dest)
(rc, out, err) = reset(dest)
if rc != 0:
fail_json(out=out, err=err)
(out, err) = pull(repo, dest)

# handle errors from clone or pull

if out.find('error') != -1:
print json.dumps({
"failed" : True,
"out" : out,
"err" : err
})
sys.exit(1)
fail_json(out=out, err=err)

# switch to version specified regardless of whether
# we cloned or pulled

(out, err) = switchver(version, dest)
if err.find('error') != -1:
print json.dumps({
"failed" : True,
"out" : out,
"err" : err
})
sys.exit(1)
fail_json(out=out, err=err)

# determine if we changed anything

Expand All @@ -156,9 +161,4 @@ changed = False
if before != after:
changed = True

print json.dumps({
"changed" : changed,
"before" : before,
"after" : after
})

exit_json(changed=changed, before=before, after=after)