151
149
"scratch", self.repo_path, "precise", params)
152
150
self.assertRaises(ErrorExit, charm.fetch)
153
151
self.assertIn('bzr: ERROR: Not a branch: ', self.output.getvalue())
156
def __init__(self, path):
157
super(Git, self).__init__(
158
path, "", logging.getLogger("deployer.repo"))
162
["git", "init", self.path],
163
"Could not initialize repo at %(path)s")
165
def write(self, files):
167
with open(os.path.join(
168
self.path, f), 'w') as fh:
172
"Could not add file %s" % f)
174
def commit(self, msg):
176
["git", "commit", "-m", msg],
177
"Could not commit at %(path)s")
181
["git", "reset", "--hard"],
182
"Could not revert at %(path)s")
186
["git", "tag", name],
187
"Could not tag at %(path)s")
189
branch = update = pull = None
192
class GitCharmTest(Base):
195
self.repo_path = d = self.mkdir()
196
self.series_path = os.path.join(d, "precise")
197
os.mkdir(self.series_path)
198
self.output = self.capture_logging(
199
"deployer.charm", level=logging.DEBUG)
201
def setup_vcs_charm(self):
202
self.branch = Git(self.mkdir())
205
{'metadata.yaml': yaml_dump({
207
'summary': 'RESTful document oriented database',
210
'interface': 'couchdb'}}}),
212
self.branch.commit('initial')
213
self.branch.write({'revision': '4'})
214
self.branch.commit('next')
215
self.branch.tag('v2')
216
self.tagged_revision = self.branch.get_cur_rev()
217
self.branch.write({'revision': '5'})
218
self.branch.commit('next')
223
"branch": self.branch.path,
228
def test_vcs_charm(self):
229
self.setup_vcs_charm()
230
params = dict(self.charm_data)
231
charm = Charm.from_service(
232
"scratch", self.repo_path, "precise", params)
234
self.assertEqual(charm.metadata['name'], 'couchdb')
235
HEAD = charm.vcs.get_cur_rev()
237
self.assertFalse(charm.is_modified())
238
with open(os.path.join(charm.path, 'revision'), 'w') as fh:
240
self.assertTrue(charm.is_modified())
241
Git(charm.path).revert()
244
# Update goes to latest with no revision specified
246
self.assertEqual(charm.vcs.get_cur_rev(), HEAD)
248
def test_vcs_fetch_with_rev(self):
249
self.setup_vcs_charm()
250
params = dict(self.charm_data)
251
rev2 = self.branch._call(
252
"git rev-parse HEAD~1".split(),
253
self.branch.err_cur_rev,
255
params['branch'] = '{}@{}'.format(params['branch'], rev2)
256
charm = Charm.from_service(
257
"scratch", self.repo_path, "precise", params)
259
self.assertEqual(charm.vcs.get_cur_rev(), rev2)
261
def test_vcs_fetch_with_tag(self):
262
self.setup_vcs_charm()
263
params = dict(self.charm_data)
264
params['branch'] = '{}@{}'.format(params['branch'], 'v2')
265
charm = Charm.from_service(
266
"scratch", self.repo_path, "precise", params)
268
self.assertEqual(charm.vcs.get_cur_rev(), self.tagged_revision)
270
def test_charm_vcs_unknown(self):
271
branch = self.mkdir()
274
'branch': "%s" % branch}
277
"scratch", self.repo_path, "precise", params)
278
self.fail("should have failed, vcs ambigious")
279
except ValueError, e:
280
self.assertIn("Could not determine vcs backend", str(e))