[PATCH 6/9] sb: Move git status to formatter classes
Sebastian Huber
sebastian.huber at embedded-brains.de
Mon Dec 8 06:48:49 UTC 2014
---
source-builder/sb/reports.py | 124 +++++++++++++++++++++++++++----------------
1 file changed, 78 insertions(+), 46 deletions(-)
diff --git a/source-builder/sb/reports.py b/source-builder/sb/reports.py
index ad42ea9..408376c 100644
--- a/source-builder/sb/reports.py
+++ b/source-builder/sb/reports.py
@@ -52,6 +52,8 @@ _line_len = 78
_title = 'RTEMS Tools Project <users at rtems.org>'
+_git_status_text = 'RTEMS Source Builder Repository Status'
+
def _make_path(p, *args):
for arg in args:
p = path.join(p, arg)
@@ -64,6 +66,9 @@ class chunk:
def line(self, text):
self.data += text + '\n'
+ def add(self, text):
+ self.data += text
+
def get(self):
return self.data
@@ -119,6 +124,27 @@ class asciidoc_formatter(formatter):
c.line('%s' % ('\n'.join(intro_text)))
return c.get()
+ def git_status(self, valid, dirty, head):
+ c = chunk()
+ c.line('')
+ c.line("'''")
+ c.line('')
+ c.line('.%s' % (_git_status_text))
+ if valid:
+ c.line('*Status*:;;')
+ if dirty:
+ c.line('_Repository is dirty_')
+ else:
+ c.line('Clean')
+ c.line('*Head*:;;')
+ c.line('Commit: %s' % (head))
+ else:
+ c.line('_Not a valid GIT repository_')
+ c.line('')
+ c.line("'''")
+ c.line('')
+ return c.get()
+
class html_formatter(asciidoc_formatter):
def format(self):
return 'html'
@@ -127,6 +153,10 @@ class html_formatter(asciidoc_formatter):
return '.html'
class text_formatter(formatter):
+ def __init__(self):
+ super(text_formatter, self).__init__()
+ self.cini = ''
+
def format(self):
return 'text'
@@ -144,7 +174,32 @@ class text_formatter(formatter):
c.line('Report: %s' % (name))
return c.get()
+ def git_status_header(self):
+ c = chunk()
+ c.line('-' * _line_len)
+ c.line('%s' % (_git_status_text))
+ return c.get()
+
+ def git_status(self, valid, dirty, head):
+ c = chunk()
+ c.add(self.git_status_header())
+ if valid:
+ c.line('%s Status:' % (self.cini))
+ if dirty:
+ c.line('%s Repository is dirty' % (self.cini))
+ else:
+ c.line('%s Clean' % (self.cini))
+ c.line('%s Head:' % (self.cini))
+ c.line('%s Commit: %s' % (self.cini, head))
+ else:
+ c.line('%s Not a valid GIT repository' % (self.cini))
+ return c.get()
+
class ini_formatter(text_formatter):
+ def __init__(self):
+ super(ini_formatter, self).__init__()
+ self.cini = ';'
+
def format(self):
return 'ini'
@@ -161,6 +216,13 @@ class ini_formatter(text_formatter):
c.line(';')
return c.get()
+ def git_status_header(self):
+ c = chunk()
+ c.line(';')
+ c.line('; %s' % (_git_status_text))
+ c.line(';')
+ return c.get()
+
class xml_formatter(formatter):
def format(self):
return 'xml'
@@ -180,6 +242,20 @@ class xml_formatter(formatter):
c.line('</RTEMSSourceBuilderReport>')
return c.get()
+ def git_status(self, valid, dirty, head):
+ c = chunk()
+ c.line('\t<Git>')
+ if valid:
+ if dirty:
+ c.line('\t\t<Status>dirty</Status>')
+ else:
+ c.line('\t\t<Status>clean</Status>')
+ c.line('\t\t<Commit>' + head + '</Commit>')
+ else:
+ c.line('\t\t<Status>invalid</Status>')
+ c.line('\t</Git>')
+ return c.get()
+
def _tree_name(path_):
return path.splitext(path.basename(path_))[0]
@@ -249,52 +325,8 @@ class report:
pass
def git_status(self):
- text = 'RTEMS Source Builder Repository Status'
- if self.is_asciidoc():
- self.output('')
- self.output("'''")
- self.output('')
- self.output('.%s' % (text))
- elif self.is_ini():
- self.output(';')
- self.output('; %s' % (text))
- self.output(';')
- else:
- self.output('-' * _line_len)
- self.output('%s' % (text))
- repo = git.repo('.', self.opts, self.macros)
- repo_valid = repo.valid()
- if repo_valid:
- if self.is_asciidoc():
- self.output('*Status*:;;')
- else:
- self.output('%s Status:' % (self.cini))
- if repo.dirty():
- if self.is_asciidoc():
- self.output('_Repository is dirty_')
- else:
- self.output('%s Repository is dirty' % (self.cini))
- else:
- if self.is_asciidoc():
- self.output('Clean')
- else:
- self.output('%s Clean' % (self.cini))
- repo_head = repo.head()
- if self.is_asciidoc():
- self.output('*Head*:;;')
- self.output('Commit: %s' % (repo_head))
- else:
- self.output('%s Head:' % (self.cini))
- self.output('%s Commit: %s' % (self.cini, repo_head))
- else:
- if self.is_asciidoc():
- self.output('_Not a valid GIT repository_')
- else:
- self.output('%s Not a valid GIT repository' % (self.cini))
- if self.is_asciidoc():
- self.output('')
- self.output("'''")
- self.output('')
+ r = git.repo('.', self.opts, self.macros)
+ self.out += self.formatter.git_status(r.valid(), r.dirty(), r.head())
def introduction(self, name, intro_text = None):
self.out += self.formatter.introduction(name, intro_text)
--
1.8.4.5
More information about the devel
mailing list