mercurial-evolve: enable evolve setting on repositories.

This commit is contained in:
Marcin Kuzminski 2017-05-10 18:33:59 +02:00
parent 1c512d1397
commit 4801f5f8ca
12 changed files with 115 additions and 13 deletions

View file

@ -1902,6 +1902,7 @@ def get_repo_settings(request, apiuser, repoid, key=Optional(None)):
"id": 237,
"result": {
"extensions_largefiles": true,
"extensions_evolve": true,
"hooks_changegroup_push_logger": true,
"hooks_changegroup_repo_size": false,
"hooks_outgoing_pull_logger": true,

View file

@ -363,6 +363,14 @@ class DbManage(object):
hgsubversion.ui_active = False
self.sa.add(hgsubversion)
# enable hgevolve disabled by default
hgevolve = RhodeCodeUi()
hgevolve.ui_section = 'extensions'
hgevolve.ui_key = 'evolve'
hgevolve.ui_value = ''
hgevolve.ui_active = False
self.sa.add(hgevolve)
# enable hggit disabled by default
hggit = RhodeCodeUi()
hggit.ui_section = 'extensions'

View file

@ -170,6 +170,16 @@ class MercurialCommit(base.BaseCommit):
return safe_unicode(phase_text)
@LazyProperty
def obsolete(self):
obsolete = self._remote.ctx_obsolete(self.idx)
return obsolete
@LazyProperty
def hidden(self):
hidden = self._remote.ctx_hidden(self.idx)
return hidden
@LazyProperty
def children(self):
"""

View file

@ -384,6 +384,7 @@ class _BaseVcsSettingsForm(formencode.Schema):
# hg
extensions_largefiles = v.StringBoolean(if_missing=False)
extensions_evolve = v.StringBoolean(if_missing=False)
phases_publish = v.StringBoolean(if_missing=False)
rhodecode_hg_use_rebase_for_merging = v.StringBoolean(if_missing=False)

View file

@ -415,15 +415,16 @@ class VcsSettingsModel(object):
('hooks', 'outgoing.pull_logger'),)
HG_SETTINGS = (
('extensions', 'largefiles'),
('phases', 'publish'),)
('phases', 'publish'),
('extensions', 'evolve'),)
GIT_SETTINGS = (
('vcs_git_lfs', 'enabled'),)
GLOBAL_HG_SETTINGS = (
('extensions', 'largefiles'),
('largefiles', 'usercache'),
('phases', 'publish'),
('extensions', 'hgsubversion'))
('extensions', 'hgsubversion'),
('extensions', 'evolve'),)
GLOBAL_GIT_SETTINGS = (
('vcs_git_lfs', 'enabled'),
('vcs_git_lfs', 'store_location'))
@ -546,22 +547,26 @@ class VcsSettingsModel(object):
@assert_repo_settings
def create_or_update_repo_hg_settings(self, data):
largefiles, phases = \
largefiles, phases, evolve = \
self.HG_SETTINGS
largefiles_key, phases_key = \
largefiles_key, phases_key, evolve_key = \
self._get_settings_keys(self.HG_SETTINGS, data)
self._create_or_update_ui(
self.repo_settings, *largefiles, value='',
active=data[largefiles_key])
self._create_or_update_ui(
self.repo_settings, *evolve, value='',
active=data[evolve_key])
self._create_or_update_ui(
self.repo_settings, *phases, value=safe_str(data[phases_key]))
def create_or_update_global_hg_settings(self, data):
largefiles, largefiles_store, phases, hgsubversion \
largefiles, largefiles_store, phases, hgsubversion, evolve \
= self.GLOBAL_HG_SETTINGS
largefiles_key, largefiles_store_key, phases_key, subversion_key \
largefiles_key, largefiles_store_key, phases_key, subversion_key, evolve_key \
= self._get_settings_keys(self.GLOBAL_HG_SETTINGS, data)
self._create_or_update_ui(
self.global_settings, *largefiles, value='',
active=data[largefiles_key])
@ -572,6 +577,9 @@ class VcsSettingsModel(object):
self.global_settings, *phases, value=safe_str(data[phases_key]))
self._create_or_update_ui(
self.global_settings, *hgsubversion, active=data[subversion_key])
self._create_or_update_ui(
self.global_settings, *evolve, value='',
active=data[evolve_key])
def create_or_update_repo_git_settings(self, data):
# NOTE(marcink): # comma make unpack work properly

View file

@ -108,6 +108,11 @@ table.dataTable {
&.td-hash {
min-width: 80px;
width: 200px;
.obsolete {
text-decoration: line-through;
color: lighten(@grey2,25%);
}
}
&.td-time {

View file

@ -130,6 +130,19 @@
<span class="help-block">${_('Requires hgsubversion library to be installed. Allows cloning remote SVN repositories and migrates them to Mercurial type.')}</span>
</div>
% endif
<div class="checkbox">
${h.checkbox('extensions_evolve' + suffix, 'True', **kwargs)}
<label for="extensions_evolve${suffix}">${_('Enable evolve extension')}</label>
</div>
<div class="label">
% if display_globals:
<span class="help-block">${_('Enable evolve extension for all repositories.')}</span>
% else:
<span class="help-block">${_('Enable evolve extension for this repository.')}</span>
% endif
</div>
</div>
</div>
## LABS for HG

View file

@ -46,13 +46,28 @@
<td class="td-hash">
<code>
<a href="${h.url('changeset_home',repo_name=c.repo_name,revision=commit.raw_id)}">
<span class="commit_hash">${h.show_id(commit)}</span>
<span class="${'commit_hash obsolete' if getattr(commit, 'obsolete', None) else 'commit_hash'}">${h.show_id(commit)}</span>
</a>
% if hasattr(commit, 'phase'):
% if commit.phase != 'public':
<span class="tag phase-${commit.phase} tooltip" title="${_('commit phase')}">${commit.phase}</span>
<span class="tag phase-${commit.phase} tooltip" title="${_('Commit phase')}">${commit.phase}</span>
% endif
% endif
## obsolete commits
% if hasattr(commit, 'obsolete'):
% if commit.obsolete:
<span class="tag obsolete-${commit.obsolete} tooltip" title="${_('Evolve State')}">${_('obsolete')}</span>
% endif
% endif
## hidden commits
% if hasattr(commit, 'hidden'):
% if commit.hidden:
<span class="tag obsolete-${commit.hidden} tooltip" title="${_('Evolve State')}">${_('hidden')}</span>
% endif
% endif
</code>
</td>
<td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_('Expand commit message')}" onclick="commitsController.expandCommit(this); return false">

View file

@ -37,8 +37,23 @@
<code>
${h.show_id(c.commit)}
% if hasattr(c.commit, 'phase'):
<span class="tag phase-${c.commit.phase} tooltip" title="${_('commit phase')}">${c.commit.phase}</span>
<span class="tag phase-${c.commit.phase} tooltip" title="${_('Commit phase')}">${c.commit.phase}</span>
% endif
## obsolete commits
% if hasattr(c.commit, 'obsolete'):
% if c.commit.obsolete:
<span class="tag obsolete-${c.commit.obsolete} tooltip" title="${_('Evolve State')}">${_('obsolete')}</span>
% endif
% endif
## hidden commits
% if hasattr(c.commit, 'hidden'):
% if c.commit.hidden:
<span class="tag hidden-${c.commit.hidden} tooltip" title="${_('Evolve State')}">${_('hidden')}</span>
% endif
% endif
</code>
</h4>
</span>

View file

@ -581,6 +581,7 @@ class TestVcsSettings(object):
'hooks_changegroup_push_logger': False,
'hooks_outgoing_pull_logger': False,
'extensions_largefiles': False,
'extensions_evolve': False,
'phases_publish': 'False',
'rhodecode_pr_merge_enabled': False,
'rhodecode_use_outdated_comments': False,

View file

@ -275,6 +275,23 @@ class TestAdminSettingsVcs(object):
'value="True" checked="checked" />')
response.mustcontain(extensions_input)
def test_extensions_hgevolve(self, app, form_defaults, csrf_token):
form_defaults.update({
'csrf_token': csrf_token,
'extensions_evolve': 'True',
})
response = app.post(
url('admin_settings_vcs'),
params=form_defaults,
status=302)
response = response.follow()
extensions_input = (
'<input id="extensions_evolve" '
'name="extensions_evolve" type="checkbox" '
'value="True" checked="checked" />')
response.mustcontain(extensions_input)
def test_has_a_section_for_pull_request_settings(self, app):
response = app.get(url('admin_settings_vcs'))
response.mustcontain('Pull Request Settings')

View file

@ -500,7 +500,8 @@ class TestCreateOrUpdateUi(object):
def test_update(self, repo_stub, settings_util):
model = VcsSettingsModel(repo=repo_stub.repo_name)
largefiles, phases = model.HG_SETTINGS
largefiles, phases, evolve = model.HG_SETTINGS
section = 'test-section'
key = 'test-key'
settings_util.create_repo_rhodecode_ui(
@ -519,6 +520,7 @@ class TestCreateOrUpdateUi(object):
class TestCreateOrUpdateRepoHgSettings(object):
FORM_DATA = {
'extensions_largefiles': False,
'extensions_evolve': False,
'phases_publish': False
}
@ -529,6 +531,8 @@ class TestCreateOrUpdateRepoHgSettings(object):
expected_calls = [
mock.call(model.repo_settings, 'extensions', 'largefiles',
active=False, value=''),
mock.call(model.repo_settings, 'extensions', 'evolve',
active=False, value=''),
mock.call(model.repo_settings, 'phases', 'publish', value='False'),
]
assert expected_calls == create_mock.call_args_list
@ -574,7 +578,8 @@ class TestCreateOrUpdateGlobalHgSettings(object):
'extensions_largefiles': False,
'largefiles_usercache': '/example/largefiles-store',
'phases_publish': False,
'extensions_hgsubversion': False
'extensions_hgsubversion': False,
'extensions_evolve': False
}
def test_creates_repo_hg_settings_when_data_is_correct(self):
@ -589,7 +594,9 @@ class TestCreateOrUpdateGlobalHgSettings(object):
mock.call(model.global_settings, 'phases', 'publish',
value='False'),
mock.call(model.global_settings, 'extensions', 'hgsubversion',
active=False)
active=False),
mock.call(model.global_settings, 'extensions', 'evolve',
active=False, value='')
]
assert expected_calls == create_mock.call_args_list
@ -957,6 +964,7 @@ class TestCreateOrUpdateRepoSettings(object):
'hooks_changegroup_push_logger': False,
'hooks_outgoing_pull_logger': False,
'extensions_largefiles': False,
'extensions_evolve': False,
'largefiles_usercache': '/example/largefiles-store',
'vcs_git_lfs_enabled': False,
'vcs_git_lfs_store_location': '/',