summaryrefslogtreecommitdiff
path: root/linaropy/rn/template.py
blob: e81a396288a4cf0a32ab6dc23dff69fd07b0b2d3 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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()