summaryrefslogtreecommitdiff
path: root/linaropy/rn/template.py
blob: dd6323c77fb0cad10767f0a3be5946d5edec7de4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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'

    def __init__(self, proj, rnclone, branchname_suffix=None):
        if branchname_suffix:
            branchname = 'template_' + branchname_suffix
        else:
            branchname = 'template_' + str(uuid.uuid4())
        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()