pull/105/head
ApexLiu 2017-11-24 19:53:49 +08:00
parent 40619185a7
commit 461c8d2dad
18 changed files with 251 additions and 146 deletions

View File

@ -15,9 +15,8 @@ class Builder:
self.ver_in = os.path.join(env.root_path, 'version.in')
self.VER_TP_SERVER = ''
self.VER_TP_SRV_WWW = ''
self.VER_TP_SRV_TPCORE = ''
self.VER_TP_SRV_TPWEB = ''
self.VER_TP_TPCORE = ''
self.VER_TP_TPWEB = ''
self.VER_TP_ASSIST = ''
def build(self):
@ -31,32 +30,29 @@ class Builder:
if l.startswith('TP_SERVER '):
x = l.split(' ')
self.VER_TP_SERVER = x[1].strip()
elif l.startswith('TP_SRV_WWW '):
elif l.startswith('TP_TPCORE '):
x = l.split(' ')
self.VER_TP_SRV_WWW = x[1].strip()
elif l.startswith('TP_SRV_TPCORE '):
self.VER_TP_TPCORE = x[1].strip()
elif l.startswith('TP_TPWEB '):
x = l.split(' ')
self.VER_TP_SRV_TPCORE = x[1].strip()
elif l.startswith('TP_SRV_TPWEB '):
x = l.split(' ')
self.VER_TP_SRV_TPWEB = x[1].strip()
self.VER_TP_TPWEB = x[1].strip()
elif l.startswith('TP_ASSIST '):
x = l.split(' ')
self.VER_TP_ASSIST = x[1].strip()
cc.v('new version:')
cc.v(' Server : ', self.VER_TP_SERVER)
cc.v(' - WWW Server : ', self.VER_TP_SRV_WWW)
cc.v(' - Core Server : ', self.VER_TP_SRV_TPCORE)
cc.v(' - Web Server : ', self.VER_TP_SRV_TPWEB)
cc.v(' - tp_core : ', self.VER_TP_TPCORE)
cc.v(' - tp_web : ', self.VER_TP_TPWEB)
cc.v(' Assist : ', self.VER_TP_ASSIST)
cc.v('')
self.make_builder_ver()
self.make_srv_www_ver()
self.make_srv_tpcore_ver()
self.make_srv_tpweb_ver()
self.make_assist_ver()
self.make_server_ver()
self.make_tpcore_ver()
self.make_tpweb_ver()
self.make_assist_win_ver()
self.make_assist_macos_ver()
def make_builder_ver(self):
ver_file = os.path.join(env.root_path, 'build', 'builder', 'core', 'ver.py')
@ -66,7 +62,6 @@ class Builder:
if not os.path.exists(ver_file):
rewrite = True
else:
old_content = ''
with open(ver_file, 'r') as f:
old_content = f.read()
if old_content != ver_content:
@ -77,9 +72,9 @@ class Builder:
with open(ver_file, 'w') as f:
f.write(ver_content)
def make_srv_tpcore_ver(self):
def make_tpcore_ver(self):
ver_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'ts_ver.h')
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_SRV_TPCORE)
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_TPCORE)
rewrite = False
if not os.path.exists(ver_file):
@ -96,12 +91,12 @@ class Builder:
f.write(ver_content)
rc_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'tp_core.rc')
self._update_vs_rc(rc_file, self.VER_TP_SRV_TPCORE)
self._update_ver_rc(rc_file, self.VER_TP_TPCORE)
def make_srv_www_ver(self):
def make_server_ver(self):
ver_file = os.path.join(env.root_path, 'server', 'www', 'teleport', 'webroot', 'app', 'app_ver.py')
# ver_content = '# -*- coding: utf8 -*-\n\nTS_VER = "{}"\n'.format(self.VER_TELEPORT_SERVER)
ver_content = '# -*- coding: utf8 -*-\nTP_SRV_WWW_VER = "{}"\n'.format(self.VER_TP_SRV_WWW)
ver_content = '# -*- coding: utf8 -*-\nTP_SERVER_VER = "{}"\n'.format(self.VER_TP_SERVER)
rewrite = False
if not os.path.exists(ver_file):
@ -117,7 +112,7 @@ class Builder:
with open(ver_file, 'w') as f:
f.write(ver_content)
def make_assist_ver(self):
def make_assist_win_ver(self):
ver_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'ts_ver.h')
ver_content = '#ifndef __TS_ASSIST_VER_H__\n#define __TS_ASSIST_VER_H__\n\n#define TP_ASSIST_VER\tL"{}"\n\n#endif // __TS_ASSIST_VER_H__\n'.format(self.VER_TP_ASSIST)
@ -125,7 +120,6 @@ class Builder:
if not os.path.exists(ver_file):
rewrite = True
else:
old_content = ''
with open(ver_file, 'r') as f:
old_content = f.read()
if old_content != ver_content:
@ -137,14 +131,18 @@ class Builder:
f.write(ver_content)
rc_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'tp_assist.rc')
self._update_vs_rc(rc_file, self.VER_TP_ASSIST)
self._update_ver_rc(rc_file, self.VER_TP_ASSIST)
nsi_file = os.path.join(env.root_path, 'dist', 'client', 'windows', 'assist', 'installer.nsi')
self._update_nsi_rc(nsi_file, self.VER_TP_ASSIST)
self._update_ver_nsi(nsi_file, self.VER_TP_ASSIST)
def make_srv_tpweb_ver(self):
def make_assist_macos_ver(self):
plist_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'src', 'tp_assist-Info.plist')
self._update_ver_plist(plist_file, self.VER_TP_ASSIST)
def make_tpweb_ver(self):
ver_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'ts_ver.h')
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_SRV_TPWEB)
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_TPWEB)
rewrite = False
if not os.path.exists(ver_file):
@ -161,14 +159,14 @@ class Builder:
f.write(ver_content)
rc_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'tp_web.rc')
self._update_vs_rc(rc_file, self.VER_TP_SRV_TPWEB)
self._update_ver_rc(rc_file, self.VER_TP_TPWEB)
def _update_vs_rc(self, rcFilePath, ver):
def _update_ver_rc(self, rcFilePath, ver):
""" update rc file version info """
t_ver = ver.split('.')
if len(t_ver) != 4:
raise RuntimeError('Invalid version for assist.')
raise RuntimeError('Invalid version for .rc file.')
bOK = False
try:
@ -272,14 +270,13 @@ class Builder:
wrcFile.close()
except IOError:
raise RuntimeError('can not open rc file.')
raise RuntimeError('can not process rc file.')
def _update_nsi_rc(self, nsiFilePath, ver):
def _update_ver_nsi(self, nsiFilePath, ver):
""" update nsis file version info """
# nver = ver.split('.')
t_ver = ver.split('.')
if len(t_ver) != 4:
raise RuntimeError('Invalid version for assist.')
raise RuntimeError('Invalid version for nsis file.')
bOK = False
try:
@ -346,7 +343,77 @@ class Builder:
return bOK
except IOError:
raise RuntimeError('can not open nsi file.')
raise RuntimeError('can not process nsi file.')
def _update_ver_plist(self, plist_file, ver):
""" update plist file version info for MacOS app."""
t_ver = ver.split('.')
if len(t_ver) != 4:
raise RuntimeError('Invalid version for plist file.')
bOK = False
try:
# open rc file
f = codecs.open(plist_file, 'r', 'utf8')
# read out all lines of rc file
lines = f.readlines()
f.close()
is_ver = False
for x in range(len(lines)):
l = lines[x]
if l.find('<key>CFBundleShortVersionString</key>') != -1:
is_ver = True
continue
if l.find('<key>CFBundleVersion</key>') != -1:
is_ver = True
continue
# pos1 = rcline.find(' FILEVERSION ')
# pos2 = rcline.rfind('\\0"')
# _ver = rcline[pos1 + 13: pos2].strip()
#
# rcSplitList = _ver.split(",")
# if (len(rcSplitList) < 4):
# rcSplitList = _ver.split(".")
# if (len(rcSplitList) < 4):
# raise RuntimeError('Invalid .rc file.')
# if '.'.join(rcSplitList) == ver:
# continue
#
# rcline = '%s%s,%s,%s,%s\n' % (rcline[0:pos1 + 13], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
#
# rcLines[x] = ""
# rcLines[x] = rcline
# # cc.v('[ver] new ver: %s' % rcLines[x])
# bOK = True
if is_ver:
is_ver = False
pos1 = l.find('<string>')
pos2 = l.rfind('</string>')
if pos1 == -1 or pos2 == -2:
continue
_ver = l[pos1 + 8: pos2].strip()
v = _ver.split(".")
if len(v) < 4:
raise RuntimeError('Invalid .plist file.')
old_ver = '.'.join(v)
if old_ver == ver:
continue
lines[x] = '<string>{ver}</string>'.format(ver=ver)
bOK = True
if bOK:
cc.v(' update {}...'.format(plist_file))
wrcFile = codecs.open(plist_file, 'w', 'utf8')
wrcFile.writelines(lines)
wrcFile.close()
except IOError:
raise RuntimeError('can not process plist file.')
def main():

View File

@ -5,26 +5,26 @@
#include <algorithm>
#include <teleport_const.h>
TP_SSH_CHANNEL_PAIR::TP_SSH_CHANNEL_PAIR() {
type = TS_SSH_CHANNEL_TYPE_UNKNOWN;
cli_channel = NULL;
srv_channel = NULL;
TP_SSH_CHANNEL_PAIR::TP_SSH_CHANNEL_PAIR() {
type = TS_SSH_CHANNEL_TYPE_UNKNOWN;
cli_channel = NULL;
srv_channel = NULL;
retcode = TP_SESS_STAT_RUNNING;
db_id = 0;
channel_id = 0;
win_width = 0;
is_first_server_data = true;
server_ready = false;
maybe_cmd = false;
process_srv = false;
client_single_char = false;
cmd_char_pos = cmd_char_list.begin();
}
win_width = 0;
is_first_server_data = true;
server_ready = false;
maybe_cmd = false;
process_srv = false;
client_single_char = false;
cmd_char_pos = cmd_char_list.begin();
}
SshSession::SshSession(SshProxy *proxy, ssh_session sess_client) :
ExThreadBase("ssh-session-thread"),
@ -89,16 +89,16 @@ void SshSession::_set_stop_flag(void) {
}
}
void SshSession::_session_error(int err_code) {
int db_id = 0;
void SshSession::_session_error(int err_code) {
int db_id = 0;
if (!g_ssh_env.session_begin(m_conn_info, &db_id) || db_id == 0)
{
EXLOGE("[ssh] can not write session error to database.\n");
return;
}
g_ssh_env.session_end(m_sid.c_str(), db_id, err_code);
}
}
bool SshSession::_record_begin(TP_SSH_CHANNEL_PAIR* cp)
{
@ -349,7 +349,7 @@ int SshSession::_on_auth_password_request(ssh_session session, const char *user,
// 现在尝试根据session-id获取得到的信息连接并登录真正的SSH服务器
EXLOGV("[ssh] try to connect to real SSH server %s:%d\n", _this->m_conn_ip.c_str(), _this->m_conn_port);
_this->m_srv_session = ssh_new();
ssh_set_blocking(_this->m_srv_session, 1);
ssh_set_blocking(_this->m_srv_session, 1);
ssh_options_set(_this->m_srv_session, SSH_OPTIONS_HOST, _this->m_conn_ip.c_str());
int port = (int)_this->m_conn_port;
ssh_options_set(_this->m_srv_session, SSH_OPTIONS_PORT, &port);
@ -545,7 +545,7 @@ ssh_channel SshSession::_on_new_channel_request(ssh_session session, void *userd
return cli_channel;
}
TP_SSH_CHANNEL_PAIR* SshSession::_get_channel_pair(int channel_side, ssh_channel channel) {
TP_SSH_CHANNEL_PAIR* SshSession::_get_channel_pair(int channel_side, ssh_channel channel) {
ExThreadSmartLock locker(m_lock);
tp_channels::iterator it = m_channels.begin();
@ -561,7 +561,7 @@ TP_SSH_CHANNEL_PAIR* SshSession::_get_channel_pair(int channel_side, ssh_channel
}
return NULL;
}
}
int SshSession::_on_client_pty_request(ssh_session session, ssh_channel channel, const char *term, int x, int y, int px, int py, void *userdata) {
SshSession *_this = (SshSession *)userdata;
@ -810,7 +810,7 @@ int SshSession::_on_server_channel_data(ssh_session session, ssh_channel channel
else
auth_mode = "unknown";
int w = min(cp->win_width, 128);
int w = std::min(cp->win_width, 128);
ex_astr line(w, '=');
snprintf(buf, sizeof(buf),
@ -859,65 +859,65 @@ int SshSession::_on_server_channel_data(ssh_session session, ssh_channel channel
}
else {
if (len > 5 && len < 256) {
const ex_u8* _begin = ex_memmem((const ex_u8*)data, len, (const ex_u8*)"\033]0;", 4);
if (NULL != _begin) {
size_t len_before = _begin - (const ex_u8*)data;
const ex_u8* _end = ex_memmem(_begin + 4, len - len_before, (const ex_u8*)"\007", 1);
if (NULL != _end)
{
_end++;
// 这个包中含有改变标题的数据,将标题换为我们想要的
EXLOGD("-- found title\n");
size_t len_end = len - (_end - (const ex_u8*)data);
MemBuffer mbuf;
if (len_before > 0)
mbuf.append((ex_u8*)data, len_before);
mbuf.append((ex_u8*)"\033]0;TP#ssh://", 13);
mbuf.append((ex_u8*)_this->m_conn_ip.c_str(), _this->m_conn_ip.length());
mbuf.append((ex_u8*)"\007", 1);
if (len_end > 0)
mbuf.append((ex_u8*)_end, len_end);
if (mbuf.size() > 0)
{
for(;;){
ret = ssh_channel_write(cp->cli_channel, mbuf.data(), mbuf.size());
if (ret == SSH_ERROR)
break;
if (ret == mbuf.size()) {
ret = len; // 表示我们已经处理了所有的数据了。
break;
}
else {
mbuf.pop(ret);
ex_sleep_ms(100);
}
}
const ex_u8* _begin = ex_memmem((const ex_u8*)data, len, (const ex_u8*)"\033]0;", 4);
if (NULL != _begin) {
size_t len_before = _begin - (const ex_u8*)data;
const ex_u8* _end = ex_memmem(_begin + 4, len - len_before, (const ex_u8*)"\007", 1);
if (NULL != _end)
{
_end++;
// 这个包中含有改变标题的数据,将标题换为我们想要的
EXLOGD("-- found title\n");
size_t len_end = len - (_end - (const ex_u8*)data);
MemBuffer mbuf;
if (len_before > 0)
mbuf.append((ex_u8*)data, len_before);
mbuf.append((ex_u8*)"\033]0;TP#ssh://", 13);
mbuf.append((ex_u8*)_this->m_conn_ip.c_str(), _this->m_conn_ip.length());
mbuf.append((ex_u8*)"\007", 1);
if (len_end > 0)
mbuf.append((ex_u8*)_end, len_end);
if (mbuf.size() > 0)
{
for(;;){
ret = ssh_channel_write(cp->cli_channel, mbuf.data(), mbuf.size());
if (ret == SSH_ERROR)
break;
if (ret == mbuf.size()) {
ret = len; // 表示我们已经处理了所有的数据了。
break;
}
else {
mbuf.pop(ret);
ex_sleep_ms(100);
}
}
// if (ret <= 0)
// EXLOGE("[ssh] send to client failed (1).\n");
// else
// ret = len;
}
else
{
ret = ssh_channel_write(cp->cli_channel, data, len);
}
}
else
{
ret = ssh_channel_write(cp->cli_channel, data, len);
}
}
else
{
ret = ssh_channel_write(cp->cli_channel, data, len);
}
}
else
{
ret = ssh_channel_write(cp->cli_channel, data, len);
}
}
else {
ret = ssh_channel_write(cp->cli_channel, data, len);
ret = ssh_channel_write(cp->cli_channel, data, len);
}
}
else {
ret = ssh_channel_write(cp->cli_channel, data, len);
ret = ssh_channel_write(cp->cli_channel, data, len);
}
}
#endif

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,7 @@
$app.on_init = function (cb_stack) {
$app.dom = {
assist_ver: $('#tp-assist-ver'),
btn_refresh_host: $('#btn-refresh-host'),
btn_add_host: $('#btn-add-host'),
chkbox_host_select_all: $('#table-host-select-all'),
@ -18,6 +19,15 @@ $app.on_init = function (cb_stack) {
upload_file_message: $('#upload-file-message')
};
$tp.assist_checked = function() {
console.log("---------");
if($tp.assist.running) {
$app.dom.assist_ver.html($tp.assist.version);
} else {
$app.dom.assist_ver.html('<a href="http://teleport.eomsoft.net/download" target="_blank" class="error">未能检测到</a>');
}
};
cb_stack
.add($app.create_controls)
.add($app.load_role_list);

View File

@ -59,17 +59,17 @@ var CALLBACK_STACK = {
// Teleport核心JS
var $tp = {
// server_host: window.location.hostname || '',
// server_port: (window.location.port === "") ? 80 : parseInt(window.location.port),
web_server: window.location.protocol+'://'+window.location.host,
web_server: window.location.protocol+'://'+window.location.host
// Teleport页面应用对象放置页面自身特有的属性和函数
app: {
options: {},
on_init: function (cb_stack) {
, app: {
options: {}
, on_init: function (cb_stack) {
cb_stack.exec();
} // should be overwrite.
}
, assist_checked: null
};
$tp.init = function () {
@ -115,12 +115,14 @@ $tp.init = function () {
];
var cs = CALLBACK_STACK.create();
cs.add($tp.app.init);
if(!_.isUndefined($tp.assist)) {
cs.add($tp.assist.init);
}
cs.add($tp.app.init);
cs.exec();
};

View File

@ -1,9 +1,8 @@
"use strict";
$tp.assist = {
ver_request: '',
ver_last: '',
ver_current: '',
running: false,
version: '',
api_url: 'http://localhost:50022/api',
teleport_ip: window.location.hostname
};
@ -25,7 +24,12 @@ $assist.init = function (cb_stack) {
jsonp: 'callback',
dataType: 'json',
success: function (ret) {
$assist.ver_current = ret.version;
$assist.running = true;
$assist.version = ret.version;
if(_.isFunction($tp.assist_checked)) {
$tp.assist_checked();
}
// if (version_compare()) {
// error_process(ret, func_success, func_error);
// } else {
@ -33,6 +37,10 @@ $assist.init = function (cb_stack) {
// }
},
error: function () {
$assist.running = false;
if(_.isFunction($tp.assist_checked)) {
$tp.assist_checked();
}
// func_error({}, TPE_NO_ASSIST, '无法连接到teleport助手可能尚未启动');
// $tp.notify_error('无法连接到teleport助手可能尚未启动');
// $assist.alert_assist_not_found();

View File

@ -83,6 +83,10 @@ label {
//font-style: italic;
}
.error {
color: @color-text-danger;
}
.bold {
font-weight: bold;
}

View File

@ -25,6 +25,7 @@
@color-text-ignore: #999;
@color-text-default: #333;
@color-text-warning: #f59c1a;
@color-text-danger: #d34242;
@color-text-on-dark-bg: #fff;
@color-text-shadow-on-dark-bg: #525252;

View File

@ -77,13 +77,21 @@ body {
//line-height: 20px;
& > li + li:before {
//font-size: 24px;
//line-height: 20px;
//padding: 0 5px;
//color: #ccc;
content: "\f105";
font-family: 'FontAwesome';
}
&.breadcrumb-list {
& > li {
font-size: @text-size-normal;
}
& > li + li:before {
//content: "\f105";
//font-family: 'FontAwesome';
content: " ";
margin:0 5px;
}
}
}
}
@ -1073,7 +1081,7 @@ textarea.cert_pub {
&.tp-editable {
cursor: pointer;
color: #459dee;
color: #459dee;
&:hover {
color: #53af43;
}

View File

@ -205,7 +205,8 @@
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;"/>
<div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">服务端:</span><span class="mono">v${app_ver.TP_SERVER_VER}</span></div>
<div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">助手:</span><span class="mono" id="tp-assist-version" data-req-version=${app_ver.TP_ASSIST_REQUIRE}>v${app_ver.TP_ASSIST_LAST_VER}</span></div>
## <div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">助手:</span><span class="mono" id="tp-assist-version" data-req-version=$ { app_ver.TP_ASSIST_REQUIRE}>v$ { app_ver.TP_ASSIST_LAST_VER}</span></div>
## <div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">助手:</span><span class="mono" id="tp-assist-version">未连接</span></div>
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:20px;margin-top:5px;"/>
## </div>

View File

@ -16,6 +16,13 @@
</style>
</%block>
<%block name="breadcrumb_extra">
<ol class="breadcrumb breadcrumb-list">
## <li><i class="fa fa-clock-o"></i> 服务器时间:<span id="tp-timer">-</span></li>
<li><i class="fa fa-flash"></i> 助手版本:<span id="tp-assist-ver"></span></li>
</ol>
</%block>
## Begin Main Body.
<div class="page-content-inner">
@ -29,8 +36,6 @@
</div>
<div class="table-extend-cell table-extend-cell-right group-actions">
<button id="btn-add-host" class="btn btn-sm btn-primary"><i class="fa fa-plus-circle fa-fw"></i> 添加主机</button>
## <button id="btn-add-temp-account" class="btn btn-sm btn-success"><i class="fa fa-plus-circle fa-fw"></i> 添加主机</button>
<button id="btn-import-asset" class="btn btn-sm btn-default"><i class="fa fa-plus-square fa-fw"></i> 导入主机和账号</button>
</div>
</div>

View File

@ -50,7 +50,7 @@
## Begin Main Body.
<div class="content-box">
<p class="welcome-message"><i class="fa fa-heart"></i> <span>欢迎安装使用 TELEPORT v${app_ver.TP_SERVER_VER} 社区版!</span></p>
<p class="welcome-message"><i class="fa fa-heart"></i> <span>欢迎安装使用 TELEPORT v${app_ver.TP_SRV_WWW_VER} 社区版!</span></p>
<hr/>
<h2><i class="fa fa-chevron-right"></i> 确定数据库类型</h2>

View File

@ -50,10 +50,10 @@
</%block>
</div>
<div class="page-header-extra" style="display:inline-block;float:right;padding-top:12px;">
## <ol class="bread-crumb">
## <li><i class="fa fa-clock-o fa-fw"></i> <span id="system-timer">111</span></li>
## </ol>
<div class="page-header-extra" style="display:inline-block;float:right;">
<div class="breadcrumb-container">
<%block name="breadcrumb_extra"/>
</div>
</div>
</div>
</div>

View File

@ -1,2 +1,2 @@
# -*- coding: utf8 -*-
TP_SRV_WWW_VER = "3.0.0.1"
# -*- coding: utf8 -*-
TP_SERVER_VER = "3.0.0.1"

View File

@ -13,8 +13,7 @@ Revision 修订号。主版本号和次版本号都相同但修订号不同
Build 构建号。构建号用于表明此版本发布之前进行了多少次构建及测试。某些情况下此版本号可以省略。
TP_SERVER 3.0.0.1 # 整个服务端打包的版本,任意一个 TP_SRV_xxx 升级,此版本也需要升级
TP_SRV_WWW 3.0.0.1 # web前后端版本
TP_SRV_TPCORE 3.0.0.1 # 核心服务 tp_core 的版本
TP_SRV_TPWEB 3.0.0.1 # web服务 tp_web 的版本一般除非升级Python否则不会变化
TP_SERVER 3.0.0.1 # 整个服务端打包的版本
TP_TPCORE 3.0.0.1 # 核心服务 tp_core 的版本
TP_TPWEB 3.0.0.1 # web服务 tp_web 的版本一般除非升级Python否则不会变化
TP_ASSIST 3.0.0.1 # 助手版本