##// END OF EJS Templates
use fixtures for forking
marcink -
r3645:aef5f5ce beta
parent child Browse files
Show More
@@ -1,371 +1,368 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 import os
4 4 import urllib
5 5
6 6 from rhodecode.lib import vcs
7 7 from rhodecode.model.db import Repository, RepoGroup, UserRepoToPerm, User,\
8 8 Permission
9 9 from rhodecode.tests import *
10 10 from rhodecode.model.repos_group import ReposGroupModel
11 11 from rhodecode.model.repo import RepoModel
12 12 from rhodecode.model.meta import Session
13 13
14 14
15 15 def _get_permission_for_user(user, repo):
16 16 perm = UserRepoToPerm.query()\
17 17 .filter(UserRepoToPerm.repository ==
18 18 Repository.get_by_repo_name(repo))\
19 19 .filter(UserRepoToPerm.user == User.get_by_username(user))\
20 20 .all()
21 21 return perm
22 22
23 23
24 24 class TestAdminReposController(TestController):
25 25
26 def __make_repo(self):
27 pass
28
29 26 def test_index(self):
30 27 self.log_user()
31 28 response = self.app.get(url('repos'))
32 29 # Test response...
33 30
34 31 def test_index_as_xml(self):
35 32 response = self.app.get(url('formatted_repos', format='xml'))
36 33
37 34 def test_create_hg(self):
38 35 self.log_user()
39 36 repo_name = NEW_HG_REPO
40 37 description = 'description for newly created repo'
41 38 response = self.app.post(url('repos'),
42 39 _get_repo_create_params(repo_private=False,
43 40 repo_name=repo_name,
44 41 repo_description=description))
45 42 self.checkSessionFlash(response,
46 43 'Created repository <a href="/%s">%s</a>'
47 44 % (repo_name, repo_name))
48 45
49 46 #test if the repo was created in the database
50 47 new_repo = self.Session().query(Repository)\
51 48 .filter(Repository.repo_name == repo_name).one()
52 49
53 50 self.assertEqual(new_repo.repo_name, repo_name)
54 51 self.assertEqual(new_repo.description, description)
55 52
56 53 #test if repository is visible in the list ?
57 54 response = response.follow()
58 55
59 56 response.mustcontain(repo_name)
60 57
61 58 #test if repository was created on filesystem
62 59 try:
63 60 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
64 61 except Exception:
65 62 self.fail('no repo %s in filesystem' % repo_name)
66 63
67 64 def test_create_hg_non_ascii(self):
68 65 self.log_user()
69 66 non_ascii = "Δ…Δ™Ε‚"
70 67 repo_name = "%s%s" % (NEW_HG_REPO, non_ascii)
71 68 repo_name_unicode = repo_name.decode('utf8')
72 69 description = 'description for newly created repo' + non_ascii
73 70 description_unicode = description.decode('utf8')
74 71 private = False
75 72 response = self.app.post(url('repos'),
76 73 _get_repo_create_params(repo_private=False,
77 74 repo_name=repo_name,
78 75 repo_description=description))
79 76 self.checkSessionFlash(response,
80 77 u'Created repository <a href="/%s">%s</a>'
81 78 % (urllib.quote(repo_name), repo_name_unicode))
82 79 #test if the repo was created in the database
83 80 new_repo = self.Session().query(Repository)\
84 81 .filter(Repository.repo_name == repo_name_unicode).one()
85 82
86 83 self.assertEqual(new_repo.repo_name, repo_name_unicode)
87 84 self.assertEqual(new_repo.description, description_unicode)
88 85
89 86 #test if repository is visible in the list ?
90 87 response = response.follow()
91 88
92 89 response.mustcontain(repo_name)
93 90
94 91 #test if repository was created on filesystem
95 92 try:
96 93 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
97 94 except Exception:
98 95 self.fail('no repo %s in filesystem' % repo_name)
99 96
100 97 def test_create_hg_in_group(self):
101 98 self.log_user()
102 99
103 100 ## create GROUP
104 101 group_name = 'sometest'
105 102 gr = ReposGroupModel().create(group_name=group_name,
106 103 group_description='test',
107 104 owner=TEST_USER_ADMIN_LOGIN)
108 105 self.Session().commit()
109 106
110 107 repo_name = 'ingroup'
111 108 repo_name_full = RepoGroup.url_sep().join([group_name, repo_name])
112 109 description = 'description for newly created repo'
113 110 response = self.app.post(url('repos'),
114 111 _get_repo_create_params(repo_private=False,
115 112 repo_name=repo_name,
116 113 repo_description=description,
117 114 repo_group=gr.group_id,))
118 115
119 116 self.checkSessionFlash(response,
120 117 'Created repository <a href="/%s">%s</a>'
121 118 % (repo_name, repo_name))
122 119 #test if the repo was created in the database
123 120 new_repo = self.Session().query(Repository)\
124 121 .filter(Repository.repo_name == repo_name_full).one()
125 122
126 123 self.assertEqual(new_repo.repo_name, repo_name_full)
127 124 self.assertEqual(new_repo.description, description)
128 125
129 126 #test if repository is visible in the list ?
130 127 response = response.follow()
131 128
132 129 response.mustcontain(repo_name_full)
133 130
134 131 #test if repository was created on filesystem
135 132 try:
136 133 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name_full))
137 134 except Exception:
138 135 ReposGroupModel().delete(group_name)
139 136 self.Session().commit()
140 137 self.fail('no repo %s in filesystem' % repo_name)
141 138
142 139 RepoModel().delete(repo_name_full)
143 140 ReposGroupModel().delete(group_name)
144 141 self.Session().commit()
145 142
146 143 def test_create_git(self):
147 144 self.log_user()
148 145 repo_name = NEW_GIT_REPO
149 146 description = 'description for newly created repo'
150 147
151 148 response = self.app.post(url('repos'),
152 149 _get_repo_create_params(repo_private=False,
153 150 repo_type='git',
154 151 repo_name=repo_name,
155 152 repo_description=description))
156 153 self.checkSessionFlash(response,
157 154 'Created repository <a href="/%s">%s</a>'
158 155 % (repo_name, repo_name))
159 156
160 157 #test if the repo was created in the database
161 158 new_repo = self.Session().query(Repository)\
162 159 .filter(Repository.repo_name == repo_name).one()
163 160
164 161 self.assertEqual(new_repo.repo_name, repo_name)
165 162 self.assertEqual(new_repo.description, description)
166 163
167 164 #test if repository is visible in the list ?
168 165 response = response.follow()
169 166
170 167 response.mustcontain(repo_name)
171 168
172 169 #test if repository was created on filesystem
173 170 try:
174 171 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
175 172 except Exception:
176 173 self.fail('no repo %s in filesystem' % repo_name)
177 174
178 175 def test_create_git_non_ascii(self):
179 176 self.log_user()
180 177 non_ascii = "Δ…Δ™Ε‚"
181 178 repo_name = "%s%s" % (NEW_GIT_REPO, non_ascii)
182 179 repo_name_unicode = repo_name.decode('utf8')
183 180 description = 'description for newly created repo' + non_ascii
184 181 description_unicode = description.decode('utf8')
185 182 private = False
186 183 response = self.app.post(url('repos'),
187 184 _get_repo_create_params(repo_private=False,
188 185 repo_type='git',
189 186 repo_name=repo_name,
190 187 repo_description=description))
191 188
192 189 self.checkSessionFlash(response,
193 190 u'Created repository <a href="/%s">%s</a>'
194 191 % (urllib.quote(repo_name), repo_name_unicode))
195 192
196 193 #test if the repo was created in the database
197 194 new_repo = self.Session().query(Repository)\
198 195 .filter(Repository.repo_name == repo_name_unicode).one()
199 196
200 197 self.assertEqual(new_repo.repo_name, repo_name_unicode)
201 198 self.assertEqual(new_repo.description, description_unicode)
202 199
203 200 #test if repository is visible in the list ?
204 201 response = response.follow()
205 202
206 203 response.mustcontain(repo_name)
207 204
208 205 #test if repository was created on filesystem
209 206 try:
210 207 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
211 208 except Exception:
212 209 self.fail('no repo %s in filesystem' % repo_name)
213 210
214 211 def test_update(self):
215 212 response = self.app.put(url('repo', repo_name=HG_REPO))
216 213
217 214 def test_update_browser_fakeout(self):
218 215 response = self.app.post(url('repo', repo_name=HG_REPO),
219 216 params=dict(_method='put'))
220 217
221 218 def test_delete_hg(self):
222 219 self.log_user()
223 220 repo_name = 'vcs_test_new_to_delete'
224 221 description = 'description for newly created repo'
225 222 response = self.app.post(url('repos'),
226 223 _get_repo_create_params(repo_private=False,
227 224 repo_type='hg',
228 225 repo_name=repo_name,
229 226 repo_description=description))
230 227
231 228 self.checkSessionFlash(response,
232 229 'Created repository <a href="/%s">%s</a>'
233 230 % (repo_name, repo_name))
234 231 #test if the repo was created in the database
235 232 new_repo = self.Session().query(Repository)\
236 233 .filter(Repository.repo_name == repo_name).one()
237 234
238 235 self.assertEqual(new_repo.repo_name, repo_name)
239 236 self.assertEqual(new_repo.description, description)
240 237
241 238 #test if repository is visible in the list ?
242 239 response = response.follow()
243 240
244 241 response.mustcontain(repo_name)
245 242
246 243 #test if repository was created on filesystem
247 244 try:
248 245 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
249 246 except Exception:
250 247 self.fail('no repo %s in filesystem' % repo_name)
251 248
252 249 response = self.app.delete(url('repo', repo_name=repo_name))
253 250
254 251 self.checkSessionFlash(response, 'Deleted repository %s' % (repo_name))
255 252
256 253 response.follow()
257 254
258 255 #check if repo was deleted from db
259 256 deleted_repo = self.Session().query(Repository)\
260 257 .filter(Repository.repo_name == repo_name).scalar()
261 258
262 259 self.assertEqual(deleted_repo, None)
263 260
264 261 self.assertEqual(os.path.isdir(os.path.join(TESTS_TMP_PATH, repo_name)),
265 262 False)
266 263
267 264 def test_delete_git(self):
268 265 self.log_user()
269 266 repo_name = 'vcs_test_new_to_delete'
270 267 description = 'description for newly created repo'
271 268 private = False
272 269 response = self.app.post(url('repos'),
273 270 _get_repo_create_params(repo_private=False,
274 271 repo_type='git',
275 272 repo_name=repo_name,
276 273 repo_description=description))
277 274
278 275 self.checkSessionFlash(response,
279 276 'Created repository <a href="/%s">%s</a>'
280 277 % (repo_name, repo_name))
281 278 #test if the repo was created in the database
282 279 new_repo = self.Session().query(Repository)\
283 280 .filter(Repository.repo_name == repo_name).one()
284 281
285 282 self.assertEqual(new_repo.repo_name, repo_name)
286 283 self.assertEqual(new_repo.description, description)
287 284
288 285 #test if repository is visible in the list ?
289 286 response = response.follow()
290 287
291 288 response.mustcontain(repo_name)
292 289
293 290 #test if repository was created on filesystem
294 291 try:
295 292 vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
296 293 except Exception:
297 294 self.fail('no repo %s in filesystem' % repo_name)
298 295
299 296 response = self.app.delete(url('repo', repo_name=repo_name))
300 297
301 298 self.checkSessionFlash(response, 'Deleted repository %s' % (repo_name))
302 299
303 300 response.follow()
304 301
305 302 #check if repo was deleted from db
306 303 deleted_repo = self.Session().query(Repository)\
307 304 .filter(Repository.repo_name == repo_name).scalar()
308 305
309 306 self.assertEqual(deleted_repo, None)
310 307
311 308 self.assertEqual(os.path.isdir(os.path.join(TESTS_TMP_PATH, repo_name)),
312 309 False)
313 310
314 311 def test_delete_repo_with_group(self):
315 312 #TODO:
316 313 pass
317 314
318 315 def test_delete_browser_fakeout(self):
319 316 response = self.app.post(url('repo', repo_name=HG_REPO),
320 317 params=dict(_method='delete'))
321 318
322 319 def test_show_hg(self):
323 320 self.log_user()
324 321 response = self.app.get(url('repo', repo_name=HG_REPO))
325 322
326 323 def test_show_git(self):
327 324 self.log_user()
328 325 response = self.app.get(url('repo', repo_name=GIT_REPO))
329 326
330 327
331 328 def test_edit(self):
332 329 response = self.app.get(url('edit_repo', repo_name=HG_REPO))
333 330
334 331 def test_set_private_flag_sets_default_to_none(self):
335 332 self.log_user()
336 333 #initially repository perm should be read
337 334 perm = _get_permission_for_user(user='default', repo=HG_REPO)
338 335 self.assertTrue(len(perm), 1)
339 336 self.assertEqual(perm[0].permission.permission_name, 'repository.read')
340 337 self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
341 338
342 339 response = self.app.put(url('repo', repo_name=HG_REPO),
343 340 _get_repo_create_params(repo_private=1,
344 341 repo_name=HG_REPO,
345 342 user=TEST_USER_ADMIN_LOGIN))
346 343 self.checkSessionFlash(response,
347 344 msg='Repository %s updated successfully' % (HG_REPO))
348 345 self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, True)
349 346
350 347 #now the repo default permission should be None
351 348 perm = _get_permission_for_user(user='default', repo=HG_REPO)
352 349 self.assertTrue(len(perm), 1)
353 350 self.assertEqual(perm[0].permission.permission_name, 'repository.none')
354 351
355 352 response = self.app.put(url('repo', repo_name=HG_REPO),
356 353 _get_repo_create_params(repo_private=False,
357 354 repo_name=HG_REPO,
358 355 user=TEST_USER_ADMIN_LOGIN))
359 356 self.checkSessionFlash(response,
360 357 msg='Repository %s updated successfully' % (HG_REPO))
361 358 self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
362 359
363 360 #we turn off private now the repo default permission should stay None
364 361 perm = _get_permission_for_user(user='default', repo=HG_REPO)
365 362 self.assertTrue(len(perm), 1)
366 363 self.assertEqual(perm[0].permission.permission_name, 'repository.none')
367 364
368 365 #update this permission back
369 366 perm[0].permission = Permission.get_by_key('repository.read')
370 367 Session().add(perm[0])
371 368 Session().commit()
@@ -1,441 +1,417 b''
1 1 from rhodecode.tests import *
2 2 from rhodecode.model.repo import RepoModel
3 3 from rhodecode.model.meta import Session
4 4 from rhodecode.model.db import Repository
5 5 from rhodecode.model.scm import ScmModel
6 6 from rhodecode.lib.vcs.backends.base import EmptyChangeset
7
8
9 def _fork_repo(fork_name, vcs_type, parent=None):
10 if vcs_type =='hg':
11 _REPO = HG_REPO
12 elif vcs_type == 'git':
13 _REPO = GIT_REPO
14
15 if parent:
16 _REPO = parent
7 from rhodecode.tests.fixture import Fixture
17 8
18 form_data = dict(
19 repo_name=fork_name,
20 repo_name_full=fork_name,
21 repo_group=None,
22 repo_type=vcs_type,
23 description='',
24 private=False,
25 copy_permissions=False,
26 landing_rev='tip',
27 update_after_clone=False,
28 fork_parent_id=Repository.get_by_repo_name(_REPO),
29 )
30 RepoModel().create_fork(form_data, cur_user=TEST_USER_ADMIN_LOGIN)
31
32 Session().commit()
33 return Repository.get_by_repo_name(fork_name)
9 fixture = Fixture()
34 10
35 11
36 12 def _commit_change(repo, filename, content, message, vcs_type, parent=None, newfile=False):
37 13 repo = Repository.get_by_repo_name(repo)
38 14 _cs = parent
39 15 if not parent:
40 16 _cs = EmptyChangeset(alias=vcs_type)
41 17
42 18 if newfile:
43 19 cs = ScmModel().create_node(
44 20 repo=repo.scm_instance, repo_name=repo.repo_name,
45 21 cs=_cs, user=TEST_USER_ADMIN_LOGIN,
46 22 author=TEST_USER_ADMIN_LOGIN,
47 23 message=message,
48 24 content=content,
49 25 f_path=filename
50 26 )
51 27 else:
52 28 cs = ScmModel().commit_change(
53 29 repo=repo.scm_instance, repo_name=repo.repo_name,
54 30 cs=parent, user=TEST_USER_ADMIN_LOGIN,
55 31 author=TEST_USER_ADMIN_LOGIN,
56 32 message=message,
57 33 content=content,
58 34 f_path=filename
59 35 )
60 36 return cs
61 37
62 38
63 39 class TestCompareController(TestController):
64 40
65 41 def setUp(self):
66 42 self.r1_id = None
67 43 self.r2_id = None
68 44
69 45 def tearDown(self):
70 46 if self.r2_id:
71 47 RepoModel().delete(self.r2_id)
72 48 if self.r1_id:
73 49 RepoModel().delete(self.r1_id)
74 50 Session().commit()
75 51 Session.remove()
76 52
77 53 def test_compare_forks_on_branch_extra_commits_hg(self):
78 54 self.log_user()
79 55 repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
80 56 description='diff-test',
81 57 owner=TEST_USER_ADMIN_LOGIN)
82 58 Session().commit()
83 59 self.r1_id = repo1.repo_id
84 60 #commit something !
85 61 cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
86 62 message='commit1', vcs_type='hg', parent=None, newfile=True)
87 63
88 64 #fork this repo
89 repo2 = _fork_repo('one-fork', 'hg', parent='one')
65 repo2 = fixture.create_fork('one', 'one-fork')
90 66 self.r2_id = repo2.repo_id
91 67
92 68 #add two extra commit into fork
93 69 cs1 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\n',
94 70 message='commit2', vcs_type='hg', parent=cs0)
95 71
96 72 cs2 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\nline3\n',
97 73 message='commit3', vcs_type='hg', parent=cs1)
98 74
99 75 rev1 = 'default'
100 76 rev2 = 'default'
101 77
102 78 response = self.app.get(url(controller='compare', action='index',
103 79 repo_name=repo1.repo_name,
104 80 org_ref_type="branch",
105 81 org_ref=rev2,
106 82 other_repo=repo2.repo_name,
107 83 other_ref_type="branch",
108 84 other_ref=rev1,
109 85 merge='1',
110 86 ))
111 87
112 88 response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, rev1))
113 89 response.mustcontain("""Showing 2 commits""")
114 90 response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
115 91
116 92 response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
117 93 response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
118 94
119 95 response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
120 96 response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
121 97 ## files
122 98 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=1#C--826e8142e6ba">file1</a>""" % (repo1.repo_name, rev2, rev1, repo2.repo_name))
123 99 #swap
124 100 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True">[swap]</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
125 101
126 102 def test_compare_forks_on_branch_extra_commits_origin_has_incomming_hg(self):
127 103 self.log_user()
128 104
129 105 repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
130 106 description='diff-test',
131 107 owner=TEST_USER_ADMIN_LOGIN)
132 108 Session().commit()
133 109 self.r1_id = repo1.repo_id
134 110
135 111 #commit something !
136 112 cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
137 113 message='commit1', vcs_type='hg', parent=None, newfile=True)
138 114
139 115 #fork this repo
140 repo2 = _fork_repo('one-fork', 'hg', parent='one')
116 repo2 = fixture.create_fork('one', 'one-fork')
141 117 self.r2_id = repo2.repo_id
142 118
143 119 #now commit something to origin repo
144 120 cs1_prim = _commit_change(repo1.repo_name, filename='file2', content='line1file2\n',
145 121 message='commit2', vcs_type='hg', parent=cs0, newfile=True)
146 122
147 123 #add two extra commit into fork
148 124 cs1 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\n',
149 125 message='commit2', vcs_type='hg', parent=cs0)
150 126
151 127 cs2 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\nline3\n',
152 128 message='commit3', vcs_type='hg', parent=cs1)
153 129
154 130 rev1 = 'default'
155 131 rev2 = 'default'
156 132
157 133 response = self.app.get(url(controller='compare', action='index',
158 134 repo_name=repo1.repo_name,
159 135 org_ref_type="branch",
160 136 org_ref=rev2,
161 137 other_repo=repo2.repo_name,
162 138 other_ref_type="branch",
163 139 other_ref=rev1,
164 140 merge='x',
165 141 ))
166 142 response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, rev1))
167 143 response.mustcontain("""Showing 2 commits""")
168 144 response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
169 145
170 146 response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
171 147 response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
172 148
173 149 response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
174 150 response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
175 151 ## files
176 152 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=x#C--826e8142e6ba">file1</a>""" % (repo1.repo_name, rev2, rev1, repo2.repo_name))
177 153 #swap
178 154 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True">[swap]</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
179 155
180 156 def test_compare_cherry_pick_changesets_from_bottom(self):
181 157
182 158 # repo1:
183 159 # cs0:
184 160 # cs1:
185 161 # repo1-fork- in which we will cherry pick bottom changesets
186 162 # cs0:
187 163 # cs1:
188 164 # cs2: x
189 165 # cs3: x
190 166 # cs4: x
191 167 # cs5:
192 168 #make repo1, and cs1+cs2
193 169 self.log_user()
194 170
195 171 repo1 = RepoModel().create_repo(repo_name='repo1', repo_type='hg',
196 172 description='diff-test',
197 173 owner=TEST_USER_ADMIN_LOGIN)
198 174 Session().commit()
199 175 self.r1_id = repo1.repo_id
200 176
201 177 #commit something !
202 178 cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
203 179 message='commit1', vcs_type='hg', parent=None,
204 180 newfile=True)
205 181 cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
206 182 message='commit2', vcs_type='hg', parent=cs0)
207 183 #fork this repo
208 repo2 = _fork_repo('repo1-fork', 'hg', parent='repo1')
184 repo2 = fixture.create_fork('repo1', 'repo1-fork')
209 185 self.r2_id = repo2.repo_id
210 186 #now make cs3-6
211 187 cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
212 188 message='commit3', vcs_type='hg', parent=cs1)
213 189 cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
214 190 message='commit4', vcs_type='hg', parent=cs2)
215 191 cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
216 192 message='commit5', vcs_type='hg', parent=cs3)
217 193 cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
218 194 message='commit6', vcs_type='hg', parent=cs4)
219 195
220 196 response = self.app.get(url(controller='compare', action='index',
221 197 repo_name=repo2.repo_name,
222 198 org_ref_type="rev",
223 199 org_ref=cs1.short_id, # parent of cs2, in repo2
224 200 other_repo=repo1.repo_name,
225 201 other_ref_type="rev",
226 202 other_ref=cs4.short_id,
227 203 merge='True',
228 204 ))
229 205 response.mustcontain('%s@%s -&gt; %s@%s' % (repo2.repo_name, cs1.short_id, repo1.repo_name, cs4.short_id))
230 206 response.mustcontain("""Showing 3 commits""")
231 207 response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")
232 208
233 209 response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
234 210 response.mustcontain("""<div class="message tooltip" title="commit4" style="white-space:normal">commit4</div>""")
235 211 response.mustcontain("""<div class="message tooltip" title="commit5" style="white-space:normal">commit5</div>""")
236 212
237 213 response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo1.repo_name, cs2.raw_id, cs2.short_id))
238 214 response.mustcontain("""<a href="/%s/changeset/%s">r3:%s</a>""" % (repo1.repo_name, cs3.raw_id, cs3.short_id))
239 215 response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo1.repo_name, cs4.raw_id, cs4.short_id))
240 216 ## files
241 217 response.mustcontain("""#C--826e8142e6ba">file1</a>""")
242 218
243 219 def test_compare_cherry_pick_changesets_from_top(self):
244 220 # repo1:
245 221 # cs0:
246 222 # cs1:
247 223 # repo1-fork- in which we will cherry pick bottom changesets
248 224 # cs0:
249 225 # cs1:
250 226 # cs2:
251 227 # cs3: x
252 228 # cs4: x
253 229 # cs5: x
254 230 #
255 231 #make repo1, and cs1+cs2
256 232 self.log_user()
257 233 repo1 = RepoModel().create_repo(repo_name='repo1', repo_type='hg',
258 234 description='diff-test',
259 235 owner=TEST_USER_ADMIN_LOGIN)
260 236 Session().commit()
261 237 self.r1_id = repo1.repo_id
262 238
263 239 #commit something !
264 240 cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
265 241 message='commit1', vcs_type='hg', parent=None,
266 242 newfile=True)
267 243 cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
268 244 message='commit2', vcs_type='hg', parent=cs0)
269 245 #fork this repo
270 repo2 = _fork_repo('repo1-fork', 'hg', parent='repo1')
246 repo2 = fixture.create_fork('repo1', 'repo1-fork')
271 247 self.r2_id = repo2.repo_id
272 248 #now make cs3-6
273 249 cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
274 250 message='commit3', vcs_type='hg', parent=cs1)
275 251 cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
276 252 message='commit4', vcs_type='hg', parent=cs2)
277 253 cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
278 254 message='commit5', vcs_type='hg', parent=cs3)
279 255 cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
280 256 message='commit6', vcs_type='hg', parent=cs4)
281 257 response = self.app.get(url(controller='compare', action='index',
282 258 repo_name=repo1.repo_name,
283 259 org_ref_type="rev",
284 260 org_ref=cs2.short_id, # parent of cs3, not in repo2
285 261 other_ref_type="rev",
286 262 other_ref=cs5.short_id,
287 263 merge='1',
288 264 ))
289 265
290 266 response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, cs2.short_id, repo1.repo_name, cs5.short_id))
291 267 response.mustcontain("""Showing 3 commits""")
292 268 response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")
293 269
294 270 response.mustcontain("""<div class="message tooltip" title="commit4" style="white-space:normal">commit4</div>""")
295 271 response.mustcontain("""<div class="message tooltip" title="commit5" style="white-space:normal">commit5</div>""")
296 272 response.mustcontain("""<div class="message tooltip" title="commit6" style="white-space:normal">commit6</div>""")
297 273
298 274 response.mustcontain("""<a href="/%s/changeset/%s">r3:%s</a>""" % (repo1.repo_name, cs3.raw_id, cs3.short_id))
299 275 response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo1.repo_name, cs4.raw_id, cs4.short_id))
300 276 response.mustcontain("""<a href="/%s/changeset/%s">r5:%s</a>""" % (repo1.repo_name, cs5.raw_id, cs5.short_id))
301 277 ## files
302 278 response.mustcontain("""#C--826e8142e6ba">file1</a>""")
303 279
304 280 def test_compare_cherry_pick_changeset_mixed_branches(self):
305 281 """
306 282
307 283 """
308 284 pass
309 285 #TODO write this tastecase
310 286
311 287 def test_compare_remote_branches_hg(self):
312 288 self.log_user()
313 289
314 repo2 = _fork_repo(HG_FORK, 'hg')
290 repo2 = fixture.create_fork(HG_REPO, HG_FORK)
315 291 self.r2_id = repo2.repo_id
316 292 rev1 = '56349e29c2af'
317 293 rev2 = '7d4bc8ec6be5'
318 294
319 295 response = self.app.get(url(controller='compare', action='index',
320 296 repo_name=HG_REPO,
321 297 org_ref_type="rev",
322 298 org_ref=rev1,
323 299 other_ref_type="rev",
324 300 other_ref=rev2,
325 301 other_repo=HG_FORK,
326 302 merge='1',
327 303 ))
328 304 response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
329 305 ## outgoing changesets between those revisions
330 306
331 307 response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_FORK))
332 308 response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_FORK))
333 309 response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_FORK, rev2))
334 310
335 311 ## files
336 312 response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
337 313 response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
338 314 response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
339 315
340 316 def test_org_repo_new_commits_after_forking_simple_diff(self):
341 317 self.log_user()
342 318
343 319 repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
344 320 description='diff-test',
345 321 owner=TEST_USER_ADMIN_LOGIN)
346 322
347 323 Session().commit()
348 324 self.r1_id = repo1.repo_id
349 325 r1_name = repo1.repo_name
350 326
351 327 #commit something initially !
352 328 cs0 = ScmModel().create_node(
353 329 repo=repo1.scm_instance, repo_name=r1_name,
354 330 cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
355 331 author=TEST_USER_ADMIN_LOGIN,
356 332 message='commit1',
357 333 content='line1',
358 334 f_path='file1'
359 335 )
360 336 Session().commit()
361 337 self.assertEqual(repo1.scm_instance.revisions, [cs0.raw_id])
362 338 #fork the repo1
363 339 repo2 = RepoModel().create_repo(repo_name='one-fork', repo_type='hg',
364 340 description='compare-test',
365 341 clone_uri=repo1.repo_full_path,
366 342 owner=TEST_USER_ADMIN_LOGIN, fork_of='one')
367 343 Session().commit()
368 344 self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
369 345 self.r2_id = repo2.repo_id
370 346 r2_name = repo2.repo_name
371 347
372 348 #make 3 new commits in fork
373 349 cs1 = ScmModel().create_node(
374 350 repo=repo2.scm_instance, repo_name=r2_name,
375 351 cs=repo2.scm_instance[-1], user=TEST_USER_ADMIN_LOGIN,
376 352 author=TEST_USER_ADMIN_LOGIN,
377 353 message='commit1-fork',
378 354 content='file1-line1-from-fork',
379 355 f_path='file1-fork'
380 356 )
381 357 cs2 = ScmModel().create_node(
382 358 repo=repo2.scm_instance, repo_name=r2_name,
383 359 cs=cs1, user=TEST_USER_ADMIN_LOGIN,
384 360 author=TEST_USER_ADMIN_LOGIN,
385 361 message='commit2-fork',
386 362 content='file2-line1-from-fork',
387 363 f_path='file2-fork'
388 364 )
389 365 cs3 = ScmModel().create_node(
390 366 repo=repo2.scm_instance, repo_name=r2_name,
391 367 cs=cs2, user=TEST_USER_ADMIN_LOGIN,
392 368 author=TEST_USER_ADMIN_LOGIN,
393 369 message='commit3-fork',
394 370 content='file3-line1-from-fork',
395 371 f_path='file3-fork'
396 372 )
397 373
398 374 #compare !
399 375 rev1 = 'default'
400 376 rev2 = 'default'
401 377
402 378 response = self.app.get(url(controller='compare', action='index',
403 379 repo_name=r2_name,
404 380 org_ref_type="branch",
405 381 org_ref=rev1,
406 382 other_ref_type="branch",
407 383 other_ref=rev2,
408 384 other_repo=r1_name,
409 385 merge='1',
410 386 ))
411 387 response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
412 388 response.mustcontain('No files')
413 389 response.mustcontain('No changesets')
414 390
415 391 #add new commit into parent !
416 392 cs0 = ScmModel().create_node(
417 393 repo=repo1.scm_instance, repo_name=r1_name,
418 394 cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
419 395 author=TEST_USER_ADMIN_LOGIN,
420 396 message='commit2-parent',
421 397 content='line1-added-after-fork',
422 398 f_path='file2'
423 399 )
424 400 #compare !
425 401 rev1 = 'default'
426 402 rev2 = 'default'
427 403 response = self.app.get(url(controller='compare', action='index',
428 404 repo_name=r2_name,
429 405 org_ref_type="branch",
430 406 org_ref=rev1,
431 407 other_ref_type="branch",
432 408 other_ref=rev2,
433 409 other_repo=r1_name,
434 410 merge='1',
435 411 ))
436 412
437 413 response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
438 414
439 415 response.mustcontain("""commit2-parent""")
440 416 response.mustcontain("""1 file changed with 1 insertions and 0 deletions""")
441 417 response.mustcontain("""line1-added-after-fork""")
General Comments 0
You need to be logged in to leave comments. Login now