summaryrefslogtreecommitdiff
path: root/rtemstoolkit/git.py
diff options
context:
space:
mode:
Diffstat (limited to 'rtemstoolkit/git.py')
-rw-r--r--rtemstoolkit/git.py61
1 files changed, 39 insertions, 22 deletions
diff --git a/rtemstoolkit/git.py b/rtemstoolkit/git.py
index 2c23c05..c77347c 100644
--- a/rtemstoolkit/git.py
+++ b/rtemstoolkit/git.py
@@ -1,13 +1,10 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
-# Copyright 2010-2014 Chris Johns (chrisj@rtems.org)
+# Copyright 2010-2015 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
@@ -61,14 +58,17 @@ class repo:
self._git_exit_code(exit_code)
return exit_code, output
- def __init__(self, _path, opts, macros = None):
+ def __init__(self, _path, opts = None, macros = None):
self.path = _path
self.opts = opts
- if macros is None:
+ if macros is None and opts is not None:
self.macros = opts.defaults
else:
self.macros = macros
- self.git = self.macros.expand('%{__git}')
+ if self.macros is None:
+ self.git = 'git'
+ else:
+ self.git = self.macros.expand('%{__git}')
def git_version(self):
ec, output = self._run(['--version'], True)
@@ -86,6 +86,9 @@ class repo:
def fetch(self):
ec, output = self._run(['fetch'], check = True)
+ def merge(self):
+ ec, output = self._run(['merge'], check = True)
+
def pull(self):
ec, output = self._run(['pull'], check = True)
@@ -105,6 +108,14 @@ class repo:
def checkout(self, branch = 'master'):
ec, output = self._run(['checkout', branch], check = True)
+ def submodule(self, module):
+ ec, output = self._run(['submodule', 'update', '--init', module], check = True)
+
+ def clean(self, args = []):
+ if type(args) == str:
+ args = [args]
+ ec, output = self._run(['clean'] + args, check = True)
+
def status(self):
_status = {}
if path.exists(self.path):
@@ -112,27 +123,33 @@ class repo:
if ec == 0:
state = 'none'
for l in output.split('\n'):
- if l.startswith('# On branch '):
- _status['branch'] = l[len('# On branch '):]
- elif l.startswith('# Changes to be committed:'):
+ if l.startswith('# '):
+ l = l[2:]
+ if l.startswith('On branch '):
+ _status['branch'] = l[len('On branch '):]
+ elif l.startswith('Changes to be committed:'):
state = 'staged'
- elif l.startswith('# Changes not staged for commit:'):
+ elif l.startswith('Changes not staged for commit:'):
state = 'unstaged'
- elif l.startswith('# Untracked files:'):
+ elif l.startswith('Untracked files:'):
state = 'untracked'
- elif state != 'none' and l[0] == '#':
- if l.strip() != '#' and not l.startswith('# ('):
- if state not in _status:
- _status[state] = []
- l = l[1:]
- if ':' in l:
- l = l.split(':')[1]
- _status[state] += [l.strip()]
+ elif l.startswith('HEAD detached'):
+ state = 'detached'
+ elif state != 'none' and len(l.strip()) != 0:
+ if l[0].isspace():
+ l = l.strip()
+ if l[0] != '(':
+ if state not in _status:
+ _status[state] = []
+ l = l[1:]
+ if ':' in l:
+ l = l.split(':')[1]
+ _status[state] += [l.strip()]
return _status
- def clean(self):
+ def dirty(self):
_status = self.status()
- return len(_status) == 1 and 'branch' in _status
+ return not (len(_status) == 1 and 'branch' in _status)
def valid(self):
if path.exists(self.path):