Show More
@@ -89,6 +89,10 b' def make_map(config):' | |||
|
89 | 89 | m.connect('repo_public_journal', "/repos_public_journal/{repo_name:.*}", |
|
90 | 90 | action="repo_public_journal", conditions=dict(method=["PUT"], |
|
91 | 91 | function=check_repo)) |
|
92 | m.connect('repo_pull', "/repo_pull/{repo_name:.*}", | |
|
93 | action="repo_pull", conditions=dict(method=["PUT"], | |
|
94 | function=check_repo)) | |
|
95 | ||
|
92 | 96 | |
|
93 | 97 | #ADMIN USER REST ROUTES |
|
94 | 98 | routes_map.resource('user', 'users', controller='admin/users', path_prefix='/_admin') |
@@ -374,7 +374,22 b' class ReposController(BaseController):' | |||
|
374 | 374 | h.flash(_('Token mismatch'), category='error') |
|
375 | 375 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
376 | 376 | |
|
377 | @HasPermissionAllDecorator('hg.admin') | |
|
378 | def repo_pull(self, repo_name): | |
|
379 | """ | |
|
380 | Runs task to update given repository with remote changes, | |
|
381 | ie. make pull on remote location | |
|
377 | 382 | |
|
383 | :param repo_name: | |
|
384 | """ | |
|
385 | try: | |
|
386 | ScmModel().pull_changes(repo_name, c.rhodecode_user.username) | |
|
387 | h.flash(_('Pulled from remote location'), category='success') | |
|
388 | except Exception, e: | |
|
389 | h.flash(_('An error occurred during pull from remote location'), | |
|
390 | category='error') | |
|
391 | ||
|
392 | return redirect(url('edit_repo', repo_name=repo_name)) | |
|
378 | 393 | |
|
379 | 394 | @HasPermissionAllDecorator('hg.admin') |
|
380 | 395 | def show(self, repo_name, format='html'): |
@@ -507,6 +507,7 b' def action_parser(user_log, feed=False):' | |||
|
507 | 507 | 'admin_forked_repo':(_('[forked] repository'), None), |
|
508 | 508 | 'admin_updated_repo':(_('[updated] repository'), None), |
|
509 | 509 | 'push':(_('[pushed] into'), get_cs_links), |
|
510 | 'push_remote':(_('[pulled from remote] into'), get_cs_links), | |
|
510 | 511 | 'pull':(_('[pulled] from'), None), |
|
511 | 512 | 'started_following_repo':(_('[started following] repository'), None), |
|
512 | 513 | 'stopped_following_repo':(_('[stopped following] repository'), None), |
@@ -518,9 +519,10 b' def action_parser(user_log, feed=False):' | |||
|
518 | 519 | else: |
|
519 | 520 | action = action_str[0].replace('[', '<span class="journal_highlight">')\ |
|
520 | 521 | .replace(']', '</span>') |
|
522 | ||
|
521 | 523 | action_params_func = lambda :"" |
|
522 | 524 | |
|
523 |
if action_str[1] |
|
|
525 | if callable(action_str[1]): | |
|
524 | 526 | action_params_func = action_str[1] |
|
525 | 527 | |
|
526 | 528 | return [literal(action), action_params_func] |
@@ -533,7 +535,7 b' def action_parser_icon(user_log):' | |||
|
533 | 535 | if len(x) > 1: |
|
534 | 536 | action, action_params = x |
|
535 | 537 | |
|
536 |
tmpl = """<img src="%s |
|
|
538 | tmpl = """<img src="%s%s" alt="%s"/>""" | |
|
537 | 539 | map = {'user_deleted_repo':'database_delete.png', |
|
538 | 540 | 'user_created_repo':'database_add.png', |
|
539 | 541 | 'user_forked_repo':'arrow_divide.png', |
@@ -543,6 +545,7 b' def action_parser_icon(user_log):' | |||
|
543 | 545 | 'admin_forked_repo':'arrow_divide.png', |
|
544 | 546 | 'admin_updated_repo':'database_edit.png', |
|
545 | 547 | 'push':'script_add.png', |
|
548 | 'push_remote':'connect.png', | |
|
546 | 549 | 'pull':'down_16.png', |
|
547 | 550 | 'started_following_repo':'heart_add.png', |
|
548 | 551 | 'stopped_following_repo':'heart_delete.png', |
@@ -91,7 +91,7 b' def log_push_action(ui, repo, **kwargs):' | |||
|
91 | 91 | extra_params = dict(repo.ui.configitems('rhodecode_extras')) |
|
92 | 92 | username = extra_params['username'] |
|
93 | 93 | repository = extra_params['repository'] |
|
94 | action = 'push:%s' | |
|
94 | action = extra_params['action'] + ':%s' | |
|
95 | 95 | node = kwargs['node'] |
|
96 | 96 | |
|
97 | 97 | def get_revs(repo, rev_opt): |
@@ -232,8 +232,6 b' class ScmModel(BaseModel):' | |||
|
232 | 232 | |
|
233 | 233 | return r, dbr |
|
234 | 234 | |
|
235 | ||
|
236 | ||
|
237 | 235 | def mark_for_invalidation(self, repo_name): |
|
238 | 236 | """Puts cache invalidation task into db for |
|
239 | 237 | further global cache invalidation |
@@ -359,6 +357,25 b' class ScmModel(BaseModel):' | |||
|
359 | 357 | == RepoModel().get_by_repo_name(repo_id)).count() |
|
360 | 358 | |
|
361 | 359 | |
|
360 | def pull_changes(self, repo_name, username): | |
|
361 | repo, dbrepo = self.get(repo_name, retval='all') | |
|
362 | ||
|
363 | try: | |
|
364 | extras = {'ip':'', | |
|
365 | 'username':username, | |
|
366 | 'action':'push_remote', | |
|
367 | 'repository':repo_name} | |
|
368 | ||
|
369 | #inject ui extra param to log this action via push logger | |
|
370 | for k, v in extras.items(): | |
|
371 | repo._repo.ui.setconfig('rhodecode_extras', k, v) | |
|
372 | ||
|
373 | repo.pull(dbrepo.clone_uri) | |
|
374 | self.mark_for_invalidation(repo_name) | |
|
375 | except: | |
|
376 | log.error(traceback.format_exc()) | |
|
377 | raise | |
|
378 | ||
|
362 | 379 | def get_unread_journal(self): |
|
363 | 380 | return self.sa.query(UserLog).count() |
|
364 | 381 |
@@ -1964,6 +1964,14 b' padding-top:1px;' | |||
|
1964 | 1964 | text-align:left; |
|
1965 | 1965 | } |
|
1966 | 1966 | |
|
1967 | .pull_icon { | |
|
1968 | background:url("../images/icons/connect.png") no-repeat scroll 3px; | |
|
1969 | height:16px; | |
|
1970 | padding-left:20px; | |
|
1971 | padding-top:1px; | |
|
1972 | text-align:left; | |
|
1973 | } | |
|
1974 | ||
|
1967 | 1975 | .rss_icon { |
|
1968 | 1976 | background:url("../images/icons/rss_16.png") no-repeat scroll 3px; |
|
1969 | 1977 | height:16px; |
@@ -314,12 +314,11 b'' | |||
|
314 | 314 | </div> |
|
315 | 315 | |
|
316 | 316 | <h3>${_('Statistics')}</h3> |
|
317 | ||
|
318 | 317 | ${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')} |
|
319 | 318 | <div class="form"> |
|
320 | 319 | <div class="fields"> |
|
321 | 320 | ${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="refresh_icon action_button",onclick="return confirm('Confirm to remove current statistics');")} |
|
322 | <div class="field"> | |
|
321 | <div class="field" style="border:none"> | |
|
323 | 322 | <ul> |
|
324 | 323 | <li>${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}</li> |
|
325 | 324 | <li>${_('Percentage of stats gathered')}: ${c.stats_percentage} %</li> |
@@ -330,6 +329,22 b'' | |||
|
330 | 329 | </div> |
|
331 | 330 | ${h.end_form()} |
|
332 | 331 | |
|
332 | %if c.repo_info.clone_uri: | |
|
333 | <h3>${_('Remote')}</h3> | |
|
334 | ${h.form(url('repo_pull', repo_name=c.repo_info.repo_name),method='put')} | |
|
335 | <div class="form"> | |
|
336 | <div class="fields"> | |
|
337 | ${h.submit('remote_pull_%s' % c.repo_info.repo_name,_('Pull changes from remote location'),class_="pull_icon action_button",onclick="return confirm('Confirm to pull changes from remote side');")} | |
|
338 | <div class="field" style="border:none"> | |
|
339 | <ul> | |
|
340 | <li><a href="${c.repo_info.clone_uri}">${c.repo_info.clone_uri}</a></li> | |
|
341 | </ul> | |
|
342 | </div> | |
|
343 | </div> | |
|
344 | </div> | |
|
345 | ${h.end_form()} | |
|
346 | %endif | |
|
347 | ||
|
333 | 348 | <h3>${_('Cache')}</h3> |
|
334 | 349 | ${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')} |
|
335 | 350 | <div class="form"> |
General Comments 0
You need to be logged in to leave comments.
Login now