import unittest import logging import os import sys import uuid from sh import ls from ..proj import Proj from ..git.clone import Clone from ..git.workdir import Workdir from ..rninput import yninput class RNTemplate(Workdir): _readme = 'components/toolchain/binaries/README.textile' _series = 'components/toolchain/binaries/README.textile.series' @classmethod def use_existing_template(cls, proj, rnclone): return cls(proj, rnclone) @classmethod def create_template(cls, proj, rnclone, branchname_suffix=None): if branchname_suffix: branchname = 'template_' + branchname_suffix else: branchname = 'template_' + str(uuid.uuid4()) return cls(proj, rnclone, branchname) def __init__(self, proj, rnclone, branchname=None): super( RNTemplate, self).__init__( proj, rnclone, "template", track="origin/master", branchname=branchname) # Todo move template workdir out of detached head state. # TODO: Allow the user to edit BOTH the gcc-linaro/ and binaries/ # README.textile file as currently this function only does the binary one. # TODO: Create Unit Test # TODO: test headless def update_readme(self, headless=False): if headless: return False answer = yninput( "Would you like to update the Template README.textile file?", "N") if answer != "y": print "The Template README.textile file has not been updated." return False editor = os.getenv('EDITOR') if not editor: editor = '/usr/bin/vim' print "Edit the README.textile template fragment if changes are needed." os.system(editor + ' ' + self.repodir + '/' + RNTemplate._readme) self.add(RNTemplate._readme) return True # TODO: Create Unit Test # TODO: test headless def update_series(self, headless=False): if headless: return False answer = yninput( "Would you like to update the Template README.textile.series file?", "N") if answer != "y": print "The Template README.textile.series file has not been updated." return False editor = os.getenv('EDITOR') if not editor: editor = '/usr/bin/vim' print "Edit the README.textile.series template fragment if changes are needed." os.system(editor + ' ' + self.repodir + '/' + RNTemplate._series) self.add(RNTemplate._series) return True # TODO: Do we need this? def get_readme(self): return self.repodir + '/' + RNTemplate._readme # TODO: Do we need this? def get_series(self): return self.repodir + '/' + RNTemplate._series class TestRNTemplate(unittest.TestCase): testdirprefix = "RNTemplateUT" # Every instance of TestClass requires its own proj directory. def setUp(self): self.proj = Proj(prefix=TestRNTemplate.testdirprefix, persist=True) def tearDown(self): self.proj.cleanup() def test_getREADME(self): self.rnrepo = Clone( self.proj, remote=u'http://git.linaro.org/toolchain/release-notes.git') self.rn_template = RNTemplate(self.proj, self.rnrepo) compare = self.proj.projdir + '/template/' + RNTemplate._readme self.assertEqual(self.rn_template.get_readme(), compare) self.assertTrue(os.path.isfile(self.rn_template.get_readme())) def test_getSERIES(self): self.rnrepo = Clone( self.proj, remote=u'http://git.linaro.org/toolchain/release-notes.git') self.rn_template = RNTemplate(self.proj, self.rnrepo) compare = self.proj.projdir + '/template/' + RNTemplate._series self.assertEqual(self.rn_template.get_series(), compare) self.assertTrue(os.path.isfile(self.rn_template.get_series())) # TODO: Test branchname_suffix if __name__ == '__main__': # logging.basicConfig(level="INFO") unittest.main()