1885 lines
55 KiB
C++
1885 lines
55 KiB
C++
|
|
#include "stdafx.h"
|
|||
|
|
#include "PatchBuilder.h"
|
|||
|
|
#include "PatchBuilderDlg.h"
|
|||
|
|
#include "ExportBrowseFolder.h"
|
|||
|
|
#include "NewProfile.h"
|
|||
|
|
#include "RegProfile.h"
|
|||
|
|
#include "SundriesFunc.h"
|
|||
|
|
#include "tinyxml.h"
|
|||
|
|
#include "EtFileSystem.h"
|
|||
|
|
#include "MD5Checksum.h"
|
|||
|
|
#include "DnAttachFile.h"
|
|||
|
|
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new DEBUG_NEW
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// CPatchBuilderDlg <20><>ȭ <20><><EFBFBD><EFBFBD>
|
|||
|
|
#define RMAKE_RESULT_NAME "rmakeresult.txt"
|
|||
|
|
|
|||
|
|
bool IsPatchFile( const char *pFileName )
|
|||
|
|
{
|
|||
|
|
char szCheckFile[ _MAX_PATH ];
|
|||
|
|
strcpy_s( szCheckFile, _MAX_PATH, pFileName );
|
|||
|
|
_strlwr_s( szCheckFile, _MAX_PATH );
|
|||
|
|
if( strncmp( szCheckFile, "mapdata", strlen( "mapdata" ) ) == 0 )
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
if( strncmp( szCheckFile, "\\mapdata", strlen( "\\mapdata" ) ) == 0 )
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
if( strncmp( szCheckFile, "resource", strlen( "resource" ) ) == 0 )
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
if( strncmp( szCheckFile, "\\resource", strlen( "\\resource" ) ) == 0 )
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CPatchBuilderDlg::CPatchBuilderDlg(CWnd* pParent /*=NULL*/)
|
|||
|
|
: CDialog(CPatchBuilderDlg::IDD, pParent)
|
|||
|
|
, m_szSVNUrl( _T("") )
|
|||
|
|
, m_szPatchFolder( _T("") )
|
|||
|
|
, m_nLastRevision( 0 )
|
|||
|
|
, m_nStartRevision( 0 )
|
|||
|
|
, m_szRMakeCmd( _T("") )
|
|||
|
|
, m_szCountryCode( _T("") )
|
|||
|
|
, m_szSVNUpdateFolder( _T("") )
|
|||
|
|
, m_bMakeFullVersion( FALSE )
|
|||
|
|
, m_bCopyServerData( FALSE )
|
|||
|
|
, m_szSVNUrlServer( _T("") )
|
|||
|
|
, m_bRollBack( FALSE )
|
|||
|
|
, m_pDnAttachFile( NULL )
|
|||
|
|
, m_szManualPatchExe( _T("") )
|
|||
|
|
, m_bManualPatch( FALSE )
|
|||
|
|
, m_nManualPatchTargetStartVer( 0 )
|
|||
|
|
, m_nManualPatchTargetEndVer( 0 )
|
|||
|
|
, m_bManualTargetVer( FALSE )
|
|||
|
|
, m_bUseRTPatch( FALSE )
|
|||
|
|
{
|
|||
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|||
|
|
m_nCurrentVersion = 0;
|
|||
|
|
m_nDefaultProfile = 0;
|
|||
|
|
m_bAutoStart = FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::DoDataExchange(CDataExchange* pDX)
|
|||
|
|
{
|
|||
|
|
CDialog::DoDataExchange(pDX);
|
|||
|
|
DDX_Text(pDX, IDC_SVN_URL, m_szSVNUrl);
|
|||
|
|
DDX_Text(pDX, IDC_PATCH_FOLDER, m_szPatchFolder);
|
|||
|
|
DDX_Control(pDX, IDC_SELECT_PROFILE, m_SelectProfile);
|
|||
|
|
DDX_Text(pDX, IDC_CURRENT_REVISION, m_nLastRevision);
|
|||
|
|
DDX_Text(pDX, IDC_BASE_REVISION, m_nStartRevision);
|
|||
|
|
DDX_Text(pDX, IDC_RMAKE_FOLDER, m_szRMakeCmd);
|
|||
|
|
DDX_Text(pDX, IDC_COUNTRY_CODE, m_szCountryCode);
|
|||
|
|
DDX_Text(pDX, IDC_SVN_UPDATE_FOLDER, m_szSVNUpdateFolder);
|
|||
|
|
DDX_Check(pDX, IDC_FULL_VERSION, m_bMakeFullVersion);
|
|||
|
|
DDX_Check(pDX, IDC_COPY_SERVER_DATA, m_bCopyServerData);
|
|||
|
|
DDX_Text(pDX, IDC_SVN_URL_SERVER, m_szSVNUrlServer);
|
|||
|
|
DDX_Check(pDX, IDC_ROLLBACK, m_bRollBack);
|
|||
|
|
DDX_Text(pDX, IDC_MANUAL_FOLDER, m_szManualPatchExe);
|
|||
|
|
DDX_Check(pDX, IDC_MANUAL_PATCH, m_bManualPatch);
|
|||
|
|
DDX_Check(pDX, IDC_CHECK_MANUAL_TARGET_VER, m_bManualTargetVer);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT_MANUALPATCH_TARGET_START_VER, m_nManualPatchTargetStartVer);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT_MANUALPATCH_TARGET_END_VER, m_nManualPatchTargetEndVer);
|
|||
|
|
DDX_Check(pDX, IDC_CHECK_USE_RTPATCH, m_bUseRTPatch);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BEGIN_MESSAGE_MAP(CPatchBuilderDlg, CDialog)
|
|||
|
|
ON_WM_PAINT()
|
|||
|
|
ON_WM_QUERYDRAGICON()
|
|||
|
|
//}}AFX_MSG_MAP
|
|||
|
|
ON_BN_CLICKED(IDC_PATCH_FOLDER_BROWSE, &CPatchBuilderDlg::OnBnClickedPatchFolderBrowse)
|
|||
|
|
ON_BN_CLICKED(ID_ADD_PROFILE, &CPatchBuilderDlg::OnBnClickedAddProfile)
|
|||
|
|
ON_BN_CLICKED(ID_MODIFY_PROFILE, &CPatchBuilderDlg::OnBnClickedModifyProfile)
|
|||
|
|
ON_BN_CLICKED(ID_DELETE_PROFILE, &CPatchBuilderDlg::OnBnClickedDeleteProfile)
|
|||
|
|
ON_CBN_SELCHANGE(IDC_SELECT_PROFILE, &CPatchBuilderDlg::OnCbnSelchangeSelectProfile)
|
|||
|
|
ON_BN_CLICKED(ID_BUILD, &CPatchBuilderDlg::OnBnClickedBuild)
|
|||
|
|
ON_BN_CLICKED(IDC_RMAKE_FOLDER_BROWSE, &CPatchBuilderDlg::OnBnClickedRmakeFolderBrowse)
|
|||
|
|
ON_BN_CLICKED(IDC_UPDATE_FOLDER_BROWSE, &CPatchBuilderDlg::OnBnClickedUpdateFolderBrowse)
|
|||
|
|
ON_BN_CLICKED(IDC_FULL_VERSION, &CPatchBuilderDlg::OnBnClickedFullVersion)
|
|||
|
|
ON_BN_CLICKED(IDC_COPY_SERVER_DATA, &CPatchBuilderDlg::OnBnClickedCopyServerData)
|
|||
|
|
ON_BN_CLICKED(ID_EXIT, &CPatchBuilderDlg::OnBnClickedExit)
|
|||
|
|
ON_BN_CLICKED(IDC_ROLLBACK, &CPatchBuilderDlg::OnBnClickedRollback)
|
|||
|
|
ON_BN_CLICKED(IDC_MANUAL_PATCH, &CPatchBuilderDlg::OnBnClickedManualPatch)
|
|||
|
|
ON_BN_CLICKED(IDC_IDC_MANUAL_FOLDER_BROWSE2, &CPatchBuilderDlg::OnBnClickedIdcManualFolderBrowse2)
|
|||
|
|
ON_BN_CLICKED(IDC_CHECK_MANUAL_TARGET_VER, &CPatchBuilderDlg::OnBnClickedCheckManualTargetVer)
|
|||
|
|
END_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
|
|||
|
|
BOOL CPatchBuilderDlg::OnInitDialog()
|
|||
|
|
{
|
|||
|
|
CDialog::OnInitDialog();
|
|||
|
|
|
|||
|
|
SetIcon(m_hIcon, TRUE); // ū <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
SetIcon(m_hIcon, FALSE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
GetModuleRoot();
|
|||
|
|
SetCurrentDirectoryA(m_szModuleRoot);
|
|||
|
|
DeleteFile(".\\rmakeresult.txt");
|
|||
|
|
|
|||
|
|
RefreshProfileList(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD>
|
|||
|
|
SetCurProfile( m_nDefaultProfile ); //<2F>ҷ<EFBFBD><D2B7><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if( m_nCurrentVersion <= 1 )
|
|||
|
|
{
|
|||
|
|
GetDlgItem( IDC_BASE_REVISION )->EnableWindow( false );
|
|||
|
|
GetDlgItem( IDC_FULL_VERSION )->EnableWindow( false );
|
|||
|
|
GetDlgItem( IDC_COPY_SERVER_DATA )->EnableWindow( false );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( m_bAutoStart )
|
|||
|
|
PostMessage( WM_COMMAND, MAKEWPARAM( ID_BUILD, 1 ) );
|
|||
|
|
|
|||
|
|
return TRUE; // <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD>ѿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TRUE<55><45> <20><>ȯ<EFBFBD>մϴ<D5B4>.
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnPaint()
|
|||
|
|
{
|
|||
|
|
if (IsIconic())
|
|||
|
|
{
|
|||
|
|
CPaintDC dc(this); // <20><EFBFBD><D7B8>⸦ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD>ؽ<EFBFBD>Ʈ
|
|||
|
|
|
|||
|
|
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
|||
|
|
|
|||
|
|
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>簢<EFBFBD><E7B0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB5A5> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
|||
|
|
int cxIcon = GetSystemMetrics(SM_CXICON);
|
|||
|
|
int cyIcon = GetSystemMetrics(SM_CYICON);
|
|||
|
|
CRect rect;
|
|||
|
|
GetClientRect(&rect);
|
|||
|
|
int x = (rect.Width() - cxIcon + 1) / 2;
|
|||
|
|
int y = (rect.Height() - cyIcon + 1) / 2;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8>ϴ<EFBFBD>.
|
|||
|
|
dc.DrawIcon(x, y, m_hIcon);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CDialog::OnPaint();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
HCURSOR CPatchBuilderDlg::OnQueryDragIcon()
|
|||
|
|
{
|
|||
|
|
return static_cast<HCURSOR>(m_hIcon);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedUpdateFolderBrowse()
|
|||
|
|
{
|
|||
|
|
CFolderDialog Dlg;
|
|||
|
|
|
|||
|
|
if( Dlg.DoModal() == IDOK )
|
|||
|
|
{
|
|||
|
|
m_szSVNUpdateFolder = Dlg.GetFolderPath();
|
|||
|
|
UpdateData( FALSE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedPatchFolderBrowse()
|
|||
|
|
{
|
|||
|
|
CFolderDialog Dlg;
|
|||
|
|
|
|||
|
|
if( Dlg.DoModal() == IDOK )
|
|||
|
|
{
|
|||
|
|
m_szPatchFolder = Dlg.GetFolderPath();
|
|||
|
|
UpdateData( FALSE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedRmakeFolderBrowse()
|
|||
|
|
{
|
|||
|
|
CFileDialog FileDlg( TRUE, "*.exe", "RMakeCmd.exe" );
|
|||
|
|
if( FileDlg.DoModal() == IDOK )
|
|||
|
|
{
|
|||
|
|
m_szRMakeCmd = FileDlg.m_ofn.lpstrFile;
|
|||
|
|
UpdateData( FALSE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedFullVersion()
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
SetRegistryNumber( HKEY_CURRENT_USER, REG_SUBKEY, "MakeFullVersion", m_bMakeFullVersion );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedCopyServerData()
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
SetRegistryNumber( HKEY_CURRENT_USER, REG_SUBKEY, "MakeServerData", m_bCopyServerData );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedRollback()
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
SetRegistryNumber( HKEY_CURRENT_USER, REG_SUBKEY, "RollBack", m_bRollBack);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedManualPatch()
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
SetRegistryNumber( HKEY_CURRENT_USER, REG_SUBKEY, "ManualPatch", m_bManualPatch);
|
|||
|
|
|
|||
|
|
if( m_bManualPatch )
|
|||
|
|
GetDlgItem( IDC_CHECK_MANUAL_TARGET_VER )->EnableWindow( true );
|
|||
|
|
else
|
|||
|
|
GetDlgItem( IDC_CHECK_MANUAL_TARGET_VER )->EnableWindow( false );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedCheckManualTargetVer()
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
|
|||
|
|
if( !m_bManualPatch )
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
if( m_bManualTargetVer )
|
|||
|
|
{
|
|||
|
|
GetDlgItem( IDC_EDIT_MANUALPATCH_TARGET_START_VER )->EnableWindow( true );
|
|||
|
|
GetDlgItem( IDC_EDIT_MANUALPATCH_TARGET_END_VER )->EnableWindow( true );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetDlgItem( IDC_EDIT_MANUALPATCH_TARGET_START_VER )->EnableWindow( false );
|
|||
|
|
GetDlgItem( IDC_EDIT_MANUALPATCH_TARGET_END_VER )->EnableWindow( false );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::RefreshProfileList()
|
|||
|
|
{
|
|||
|
|
m_SelectProfile.ResetContent();
|
|||
|
|
int i;
|
|||
|
|
for( i = 0; i < CRegProfile::GetInstance().GetProfileCount(); i++ )
|
|||
|
|
{
|
|||
|
|
SProfile *pProfile = CRegProfile::GetInstance().GetProfile( i );
|
|||
|
|
m_SelectProfile.AddString( pProfile->szProfileName.c_str() );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::SetCurProfile( int nIndex ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>
|
|||
|
|
{
|
|||
|
|
m_SelectProfile.SetCurSel( nIndex );
|
|||
|
|
|
|||
|
|
SProfile *pProfile = CRegProfile::GetInstance().GetProfile( nIndex );
|
|||
|
|
if( !pProfile )
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
m_szSVNUrl = pProfile->szSVNUrl.c_str();
|
|||
|
|
m_szSVNUpdateFolder = pProfile->szSVNUpdateFolder.c_str();
|
|||
|
|
m_szPatchFolder = pProfile->szPatchFolder.c_str();
|
|||
|
|
m_szRMakeCmd = pProfile->szRMakeCmd.c_str();
|
|||
|
|
m_szCountryCode = pProfile->szCountryCode.c_str();
|
|||
|
|
m_szSVNUrlServer = pProfile->szSVNUrlServer.c_str();
|
|||
|
|
m_szManualPatchExe = pProfile->szManualPatchExe.c_str();
|
|||
|
|
|
|||
|
|
CheckSVNInfo( nIndex );
|
|||
|
|
CheckPatchFolder();
|
|||
|
|
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
LoadPatchInfo();
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
|
|||
|
|
UpdateData( FALSE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedAddProfile() // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20>ƹ<EFBFBD><C6B9>ų<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
{
|
|||
|
|
CNewProfile Dlg;
|
|||
|
|
|
|||
|
|
if( Dlg.DoModal() == IDOK )
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
|
|||
|
|
SProfile TempProfile;
|
|||
|
|
TempProfile.szProfileName = Dlg.m_szProfileName.GetBuffer();
|
|||
|
|
TempProfile.szSVNUrl = m_szSVNUrl.GetBuffer();
|
|||
|
|
TempProfile.szSVNUpdateFolder = m_szSVNUpdateFolder.GetBuffer();
|
|||
|
|
TempProfile.szPatchFolder = m_szPatchFolder.GetBuffer();
|
|||
|
|
TempProfile.szRMakeCmd = m_szRMakeCmd.GetBuffer();
|
|||
|
|
TempProfile.szCountryCode = m_szCountryCode.GetBuffer();
|
|||
|
|
TempProfile.szSVNUrlServer = m_szSVNUrlServer.GetBuffer();
|
|||
|
|
TempProfile.szManualPatchExe = m_szManualPatchExe.GetBuffer();
|
|||
|
|
|
|||
|
|
CRegProfile::GetInstance().AddProfile( TempProfile );
|
|||
|
|
|
|||
|
|
RefreshProfileList();
|
|||
|
|
SetCurProfile( CRegProfile::GetInstance().GetProfileCount() - 1 );
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
sprintf_s( szString, 1024, "Profile %s <20>߰<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>", Dlg.m_szProfileName.GetBuffer() );
|
|||
|
|
MessageBox( szString );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedModifyProfile() // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
int nCurSel = m_SelectProfile.GetCurSel();
|
|||
|
|
if( nCurSel == CB_ERR )
|
|||
|
|
{
|
|||
|
|
MessageBox( "<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> Profile<6C><65> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>." );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
|
|||
|
|
SProfile *pProfile = CRegProfile::GetInstance().GetProfile( nCurSel );
|
|||
|
|
pProfile->szSVNUrl = m_szSVNUrl.GetBuffer();
|
|||
|
|
pProfile->szSVNUpdateFolder = m_szSVNUpdateFolder.GetBuffer();
|
|||
|
|
pProfile->szPatchFolder = m_szPatchFolder.GetBuffer();
|
|||
|
|
pProfile->szRMakeCmd = m_szRMakeCmd.GetBuffer();
|
|||
|
|
pProfile->szCountryCode = m_szCountryCode.GetBuffer();
|
|||
|
|
pProfile->szSVNUrlServer = m_szSVNUrlServer.GetBuffer();
|
|||
|
|
pProfile->szManualPatchExe = m_szManualPatchExe.GetBuffer();
|
|||
|
|
|
|||
|
|
CRegProfile::GetInstance().SaveProfile();
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
sprintf_s( szString, 1024, "Profile %s <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>", pProfile->szProfileName.c_str() );
|
|||
|
|
MessageBox( szString );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedDeleteProfile() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
int nCurSel = m_SelectProfile.GetCurSel();
|
|||
|
|
if( nCurSel == CB_ERR )
|
|||
|
|
{
|
|||
|
|
MessageBox( "<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> Profile<6C><65> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>." );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SProfile *pProfile = CRegProfile::GetInstance().GetProfile( nCurSel );
|
|||
|
|
std::string szDelName = pProfile->szProfileName;
|
|||
|
|
CRegProfile::GetInstance().DeleteProfile( nCurSel );
|
|||
|
|
RefreshProfileList();
|
|||
|
|
if( CRegProfile::GetInstance().GetProfileCount() > 0 )
|
|||
|
|
{
|
|||
|
|
SetCurProfile( 0 );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
sprintf_s( szString, 1024, "Profile %s <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>", szDelName.c_str() );
|
|||
|
|
MessageBox( szString );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnCbnSelchangeSelectProfile()
|
|||
|
|
{
|
|||
|
|
int nCurSel = m_SelectProfile.GetCurSel();
|
|||
|
|
|
|||
|
|
if( nCurSel == CB_ERR )
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
SetCurProfile( nCurSel );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::GetModifyList()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "GetModifyList" );
|
|||
|
|
SetWorkStatus( "Log <20>м<EFBFBD><D0BC><EFBFBD><EFBFBD>Դϴ<D4B4>" );
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
std::string szOutput;
|
|||
|
|
int nStartRevision, nEndRevision;
|
|||
|
|
nStartRevision = m_nStartRevision + 1;
|
|||
|
|
nEndRevision = m_nLastRevision;
|
|||
|
|
if( nStartRevision > nEndRevision )
|
|||
|
|
{
|
|||
|
|
nStartRevision = nEndRevision;
|
|||
|
|
}
|
|||
|
|
#ifdef DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "svn log %s -r %d:%d -v --xml --username hicom15 --password 6326", m_szSVNUrl.GetBuffer(), nStartRevision, nEndRevision );
|
|||
|
|
#else // DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "svn log %s -r %d:%d -v --xml --username build --password b@0625", m_szSVNUrl.GetBuffer(), nStartRevision, nEndRevision );
|
|||
|
|
#endif // DH_SELF_TEST
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
ExecCommand( szString, &szOutput );
|
|||
|
|
|
|||
|
|
int nMainFolderLength = m_szMainFolder.GetLength();
|
|||
|
|
m_vecModifyFile.clear();
|
|||
|
|
m_vecDeleteFile.clear();
|
|||
|
|
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
m_vecRollDeleteFile.clear();
|
|||
|
|
m_vecRestoreFile.clear();
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
|
|||
|
|
TiXmlDocument Document;
|
|||
|
|
Document.Parse( szOutput.c_str(), 0, TIXML_ENCODING_UTF8 );
|
|||
|
|
if ( !Document.Error() )
|
|||
|
|
{
|
|||
|
|
TiXmlElement* pRoot = Document.FirstChildElement( "log" );
|
|||
|
|
if( pRoot )
|
|||
|
|
{
|
|||
|
|
TiXmlElement* pLogEntryElement = pRoot->FirstChildElement( "logentry" );
|
|||
|
|
while( pLogEntryElement )
|
|||
|
|
{
|
|||
|
|
TiXmlElement *pPathsElement = pLogEntryElement->FirstChildElement( "paths" );
|
|||
|
|
if( pPathsElement )
|
|||
|
|
{
|
|||
|
|
TiXmlElement *pPath = pPathsElement->FirstChildElement( "path" );
|
|||
|
|
while( pPath )
|
|||
|
|
{
|
|||
|
|
const char *pAction = pPath->Attribute( "action" );
|
|||
|
|
if( pAction )
|
|||
|
|
{
|
|||
|
|
const char *pFileName = pPath->GetText() + nMainFolderLength;
|
|||
|
|
if( pFileName[ 0 ] && strstr( pPath->GetText(), m_szMainFolder.GetBuffer() ) && strstr( pPath->GetText(), "." ) ) // <20><><EFBFBD><EFBFBD> Ȯ<><C8AE> <20><> <20><><EFBFBD><EFBFBD> <20>α<CEB1> <20><><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
pFileName++;
|
|||
|
|
std::vector< std::string >::iterator idModi = std::find( m_vecModifyFile.begin(), m_vecModifyFile.end(), pFileName );
|
|||
|
|
std::vector< std::string >::iterator itDelete = std::find( m_vecDeleteFile.begin(), m_vecDeleteFile.end(), pFileName );
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
std::vector< std::string >::iterator itRollDelete = std::find( m_vecRollDeleteFile.begin() ,m_vecRollDeleteFile.end() , pFileName ) ;
|
|||
|
|
std::vector< std::string >::iterator itRestore = std::find( m_vecRestoreFile.begin() , m_vecRestoreFile.end() , pFileName );
|
|||
|
|
|
|||
|
|
// 'A' <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾߵǰ<DFB5> M , D <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ȱ<EFBFBD><C8B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߱ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
|||
|
|
switch(pAction[0])
|
|||
|
|
{
|
|||
|
|
case 'A':
|
|||
|
|
if ( itRollDelete == m_vecRollDeleteFile.end() )
|
|||
|
|
{
|
|||
|
|
m_vecRollDeleteFile.push_back(pFileName);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 'M':
|
|||
|
|
case 'R':
|
|||
|
|
case 'D':
|
|||
|
|
//<2F>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>ϱ<CFB1><E2B6A7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1> <20>ʴ´<CAB4>.
|
|||
|
|
if( itRollDelete != m_vecRollDeleteFile.end() )
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( itRestore == m_vecRestoreFile.end())
|
|||
|
|
{
|
|||
|
|
m_vecRestoreFile.push_back(pFileName);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
ASSERT( 0 && "<EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7BC>ڵ<EFBFBD>" );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
switch( pAction[ 0 ] )
|
|||
|
|
{
|
|||
|
|
case 'A':
|
|||
|
|
case 'M':
|
|||
|
|
case 'R':
|
|||
|
|
if( idModi == m_vecModifyFile.end() )
|
|||
|
|
{
|
|||
|
|
m_vecModifyFile.push_back( pFileName );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20>߰<EFBFBD><DFB0>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
if( itDelete != m_vecDeleteFile.end() )
|
|||
|
|
{
|
|||
|
|
m_vecDeleteFile.erase( itDelete );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 'D':
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if( idModi != m_vecModifyFile.end() )
|
|||
|
|
{
|
|||
|
|
m_vecModifyFile.erase( idModi );
|
|||
|
|
}
|
|||
|
|
if( itDelete == m_vecDeleteFile.end() )
|
|||
|
|
{
|
|||
|
|
m_vecDeleteFile.push_back( pFileName );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
ASSERT( 0 && "<EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7BC>ڵ<EFBFBD>" );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TiXmlNode *pPathNode =pPathsElement->IterateChildren( pPath );
|
|||
|
|
|
|||
|
|
if( pPathNode )
|
|||
|
|
pPath = pPathNode->ToElement();
|
|||
|
|
else
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TiXmlNode *pLogEntryNode = pRoot->IterateChildren( pLogEntryElement );
|
|||
|
|
|
|||
|
|
if( pLogEntryNode )
|
|||
|
|
pLogEntryElement = pLogEntryNode->ToElement();
|
|||
|
|
else
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
MessageBox( "Log <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int i;
|
|||
|
|
std::sort( m_vecDeleteFile.begin(), m_vecDeleteFile.end() );
|
|||
|
|
std::sort( m_vecModifyFile.begin(), m_vecModifyFile.end() );
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
std::sort( m_vecRollDeleteFile.begin(), m_vecRollDeleteFile.end() );
|
|||
|
|
std::sort( m_vecRestoreFile.begin(), m_vecRestoreFile.end() );
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
for( i = 0; i < ( int )m_vecDeleteFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
std::replace( m_vecDeleteFile[ i ].begin(), m_vecDeleteFile[ i ].end(), '/', '\\' );
|
|||
|
|
}
|
|||
|
|
for( i = 0; i < ( int )m_vecModifyFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
std::replace( m_vecModifyFile[ i ].begin(), m_vecModifyFile[ i ].end(), '/', '\\' );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
for( i = 0; i < ( int )m_vecRollDeleteFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
std::replace( m_vecRollDeleteFile[ i ].begin(), m_vecRollDeleteFile[ i ].end(), '/', '\\' );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for( i = 0; i < ( int )m_vecRestoreFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
std::replace( m_vecRestoreFile[ i ].begin(), m_vecRestoreFile[ i ].end(), '/', '\\' );
|
|||
|
|
}
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::UpdateLastRevision()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "UpdateLastRevision" );
|
|||
|
|
SetWorkStatus( "Update <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>" );
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
SHELLEXECUTEINFO ShellExecInfo;
|
|||
|
|
|
|||
|
|
memset( &ShellExecInfo, 0, sizeof( SHELLEXECUTEINFO ) );
|
|||
|
|
ShellExecInfo.cbSize = sizeof( SHELLEXECUTEINFO );
|
|||
|
|
ShellExecInfo.hwnd = GetSafeHwnd();
|
|||
|
|
ShellExecInfo.lpFile = "svn";
|
|||
|
|
ShellExecInfo.nShow = SW_SHOW;
|
|||
|
|
ShellExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE;
|
|||
|
|
ShellExecInfo.lpVerb = __TEXT( "open" );
|
|||
|
|
ShellExecInfo.lpParameters = szString;
|
|||
|
|
|
|||
|
|
#ifdef DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "update %s -r %d --username hicom15 --password 6326", m_szSVNUpdateFolder.GetBuffer(), m_nLastRevision );
|
|||
|
|
#else // DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "update %s -r %d --username build --password b@0625", m_szSVNUpdateFolder.GetBuffer(), m_nLastRevision );
|
|||
|
|
#endif // DH_SELF_TEST
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CPatchBuilderDlg::CopyBuild( bool bDirectCopy )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "CopyBuild" );
|
|||
|
|
SetWorkStatus( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD>Դϴ<D4B4>" );
|
|||
|
|
|
|||
|
|
char szString[ 1024 ], szCopyFolder[ _MAX_PATH ];
|
|||
|
|
SHELLEXECUTEINFO ShellExecInfo;
|
|||
|
|
|
|||
|
|
memset( &ShellExecInfo, 0, sizeof( SHELLEXECUTEINFO ) );
|
|||
|
|
ShellExecInfo.cbSize = sizeof( SHELLEXECUTEINFO );
|
|||
|
|
ShellExecInfo.hwnd = GetSafeHwnd();
|
|||
|
|
ShellExecInfo.lpFile = "cmd.exe";
|
|||
|
|
ShellExecInfo.nShow = SW_SHOW;
|
|||
|
|
ShellExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE;
|
|||
|
|
ShellExecInfo.lpVerb = __TEXT( "open" );
|
|||
|
|
ShellExecInfo.lpParameters = szString;
|
|||
|
|
|
|||
|
|
if( bDirectCopy )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szCopyFolder, _MAX_PATH, "%s\\%08d\\Server", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetCurrentDirectory( _MAX_PATH, szCopyFolder );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "/c %s %s %s\\LoginServer /SL %s", m_szRMakeCmd.GetBuffer(), m_szSVNUpdateFolder.GetBuffer(), szCopyFolder, m_szCountryCode.GetBuffer() );
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "%s\\LoginServer\\%s",szCopyFolder , RMAKE_RESULT_NAME );
|
|||
|
|
if( !FileExistName(szString))
|
|||
|
|
{
|
|||
|
|
goto ErrorMsg;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "/c %s %s %s\\MasterServer /SM %s", m_szRMakeCmd.GetBuffer(), m_szSVNUpdateFolder.GetBuffer(), szCopyFolder, m_szCountryCode.GetBuffer() );
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "%s\\MasterServer\\rmakeresult.txt",szCopyFolder );
|
|||
|
|
if( !FileExistName(szString))
|
|||
|
|
{
|
|||
|
|
goto ErrorMsg;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char szSourceFile[ _MAX_PATH ], szDestFile[ _MAX_PATH ];
|
|||
|
|
sprintf_s( szSourceFile, _MAX_PATH, "%s\\ResourceRevision.txt", szCopyFolder );
|
|||
|
|
sprintf_s( szDestFile, _MAX_PATH, "%s\\VillageServer\\ResourceRevision.txt", szCopyFolder );
|
|||
|
|
if( CopyFile( szSourceFile, szDestFile, FALSE ) == 0 )
|
|||
|
|
{
|
|||
|
|
char szPath[ _MAX_PATH ];
|
|||
|
|
_GetPath( szPath, szDestFile );
|
|||
|
|
CreateFolder( szPath );
|
|||
|
|
CopyFile( szSourceFile, szDestFile, FALSE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "/c %s %s %s\\VillageServer /SV %s /zip", m_szRMakeCmd.GetBuffer(), m_szSVNUpdateFolder.GetBuffer(), szCopyFolder, m_szCountryCode.GetBuffer() );
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "%s\\VillageServer\\%s",szCopyFolder , RMAKE_RESULT_NAME );
|
|||
|
|
if( !FileExistName(szString))
|
|||
|
|
{
|
|||
|
|
goto ErrorMsg;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szSourceFile, _MAX_PATH, "%s\\ResourceRevision.txt", szCopyFolder );
|
|||
|
|
sprintf_s( szDestFile, _MAX_PATH, "%s\\GameServer\\ResourceRevision.txt", szCopyFolder );
|
|||
|
|
if( CopyFile( szSourceFile, szDestFile, FALSE ) == 0 )
|
|||
|
|
{
|
|||
|
|
char szPath[ _MAX_PATH ];
|
|||
|
|
_GetPath( szPath, szDestFile );
|
|||
|
|
CreateFolder( szPath );
|
|||
|
|
CopyFile( szSourceFile, szDestFile, FALSE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "/c %s %s %s\\GameServer /SG %s /zip", m_szRMakeCmd.GetBuffer(), m_szSVNUpdateFolder.GetBuffer(), szCopyFolder, m_szCountryCode.GetBuffer() );
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "%s\\GameServer\\%s",szCopyFolder , RMAKE_RESULT_NAME);
|
|||
|
|
if( !FileExistName(szString))
|
|||
|
|
{
|
|||
|
|
goto ErrorMsg;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
|
|||
|
|
ErrorMsg:
|
|||
|
|
sprintf_s( szString , 1024 , "%s\\%s", m_szModuleRoot , RMAKE_RESULT_NAME );
|
|||
|
|
FILE *fp;
|
|||
|
|
fopen_s( &fp, szString , "w" );
|
|||
|
|
fprintf(fp , " ");
|
|||
|
|
fclose(fp);
|
|||
|
|
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::CreateDeleteList()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "CreateDeleteList" );
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
FILE *fp;
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\Patch%08d.txt", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, m_nCurrentVersion );
|
|||
|
|
fopen_s( &fp, szString, "wt" );
|
|||
|
|
for( int i = 0; i < ( int )m_vecDeleteFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
WCHAR wszBuffer[ _MAX_PATH ];
|
|||
|
|
char szTemp[ _MAX_PATH ];
|
|||
|
|
MultiByteToWideChar( CP_UTF8, 0, m_vecDeleteFile[ i ].c_str(), -1, wszBuffer, _MAX_PATH );
|
|||
|
|
WideCharToMultiByte( CP_ACP, 0, wszBuffer, -1, szTemp, _MAX_PATH, NULL, NULL );
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "D %s\n", szTemp );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int bFindLauncher = false;
|
|||
|
|
for( int i = 0; i < ( int )m_vecModifyFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
if( _stricmp( m_vecModifyFile[ i ].c_str(), "DNLauncher.exe" ) == 0 )
|
|||
|
|
{
|
|||
|
|
m_vecModifyFile.erase( m_vecModifyFile.begin() + i );
|
|||
|
|
bFindLauncher = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if( bFindLauncher )
|
|||
|
|
{
|
|||
|
|
m_vecModifyFile.push_back( "DNLauncher.exe" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for( int i = 0; i < ( int )m_vecModifyFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
if( IsPatchFile( m_vecModifyFile[ i ].c_str() ) )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "P %s\n", m_vecModifyFile[ i ].c_str() );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "C %s\n", m_vecModifyFile[ i ].c_str() );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// <20>ƹ<EFBFBD><C6B9>͵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD>Ʈ¥<C6AE><C2A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD>.. <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> <20>ȵɼ<C8B5><C9BC><EFBFBD> <20>־. <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20>־<EFBFBD><D6BE>ش<EFBFBD>.
|
|||
|
|
fputs( " ", fp );
|
|||
|
|
fclose( fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::CreatePatch()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "CreatePatch" );
|
|||
|
|
CEtPackingFile FileSystem;
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\Patch%08d.pak", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, m_nCurrentVersion );
|
|||
|
|
FileSystem.NewFileSystem( szString );
|
|||
|
|
std::sort( m_vecModifyFile.begin(), m_vecModifyFile.end() );
|
|||
|
|
for( int i = 0; i < ( int )m_vecModifyFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
char szPath[ _MAX_PATH ], szFileName[ _MAX_PATH ];
|
|||
|
|
_GetPath( szPath, m_vecModifyFile[ i ].c_str() );
|
|||
|
|
sprintf_s( szFileName, _MAX_PATH, "%s\\%s", m_szSVNUpdateFolder.GetBuffer(), m_vecModifyFile[ i ].c_str() );
|
|||
|
|
|
|||
|
|
FileSystem.ChangeDir( "\\" );
|
|||
|
|
if( szPath[ 0 ] )
|
|||
|
|
{
|
|||
|
|
FileSystem.ChangeDir( szPath );
|
|||
|
|
}
|
|||
|
|
FileSystem.AddFile( szFileName );
|
|||
|
|
|
|||
|
|
char szMessage[ 1024 ];
|
|||
|
|
sprintf_s( szMessage, 1024, "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4> %d%%", ( int )( i * 100 / m_vecModifyFile.size() ) );
|
|||
|
|
SetWorkStatus( szMessage );
|
|||
|
|
}
|
|||
|
|
FileSystem.CloseFileSystem();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::CopyServerPatch( bool bDirectCopy )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "CopyServerPatch" );
|
|||
|
|
SetWorkStatus( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>" );
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\Server", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
|
|||
|
|
if( m_szSVNUrlServer.GetLength() )
|
|||
|
|
{
|
|||
|
|
SHELLEXECUTEINFO ShellExecInfo;
|
|||
|
|
memset( &ShellExecInfo, 0, sizeof( SHELLEXECUTEINFO ) );
|
|||
|
|
ShellExecInfo.cbSize = sizeof( SHELLEXECUTEINFO );
|
|||
|
|
ShellExecInfo.hwnd = GetSafeHwnd();
|
|||
|
|
ShellExecInfo.lpFile = "svn";
|
|||
|
|
ShellExecInfo.nShow = SW_SHOW;
|
|||
|
|
ShellExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE;
|
|||
|
|
ShellExecInfo.lpVerb = __TEXT( "open" );
|
|||
|
|
ShellExecInfo.lpParameters = szString;
|
|||
|
|
#ifdef DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "export -r %d %s %s\\%08d\\Server --force --username hicom15 --password 6326", m_nLastRevision, m_szSVNUrlServer.GetBuffer(), m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
#else // DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "export -r %d %s %s\\%08d\\Server --force --username build --password b@0625", m_nLastRevision, m_szSVNUrlServer.GetBuffer(), m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
#endif // DH_SELF_TEST
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::LoadPatchInfo()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "LoadPatchInfo" );
|
|||
|
|
FILE *fp;
|
|||
|
|
char szString[ 1024 ] = {0,};
|
|||
|
|
DWORD dwsize = 0;
|
|||
|
|
char arg1[1024]={0,} , arg2[1024]={0,};
|
|||
|
|
m_SkipNumber.clear();
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\PatchInfoServer.cfg", m_szPatchFolder.GetBuffer() );
|
|||
|
|
|
|||
|
|
if( !fopen_s( &fp, szString, "rt" ) )
|
|||
|
|
{
|
|||
|
|
fseek(fp , 0 , SEEK_END );
|
|||
|
|
dwsize = ftell(fp);
|
|||
|
|
fseek(fp , 0 , SEEK_SET);
|
|||
|
|
|
|||
|
|
char *buffer = new char[dwsize+ 3 ];
|
|||
|
|
ZeroMemory(buffer , dwsize+3);
|
|||
|
|
fread(buffer, sizeof(char) , dwsize , fp );
|
|||
|
|
|
|||
|
|
char *szToken , *nextToken ,delimiters[] = "\r\n";
|
|||
|
|
szToken = strtok_s(buffer , delimiters , &nextToken );
|
|||
|
|
|
|||
|
|
while( szToken != NULL )
|
|||
|
|
{
|
|||
|
|
if(sscanf_s(szToken , "%s %s" ,&arg1 , sizeof(arg1) ,&arg2 , sizeof(arg2)))
|
|||
|
|
{
|
|||
|
|
_strlwr_s( arg1 );
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
if( strcmp(arg1 , "version") == 0 )
|
|||
|
|
{
|
|||
|
|
int a = 0 ;
|
|||
|
|
}
|
|||
|
|
//skipnum <20><> <20>о<EFBFBD><D0BE>´<EFBFBD>.
|
|||
|
|
else if( strcmp(arg1 , "skipnum") == 0 )
|
|||
|
|
{
|
|||
|
|
int version = atol(arg2);
|
|||
|
|
m_SkipNumber.push_back(version);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
szToken = strtok_s( NULL, delimiters ,&nextToken );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
delete [] buffer;
|
|||
|
|
fclose(fp);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::UpdatePatchInfo()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "UpdatePatchInfo" );
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
//<2F><>ŵ<EFBFBD><C5B5> <20><>ȣ<EFBFBD><C8A3> <20><>ġ<EFBFBD><C4A1> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
std::vector<std::string > m_PatchInfoData;
|
|||
|
|
|
|||
|
|
FILE *fp;
|
|||
|
|
char szString[ 1024 ] = {0,};
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\PatchInfoServer.cfg", m_szPatchFolder.GetBuffer() );
|
|||
|
|
std::sort(m_SkipNumber.begin() , m_SkipNumber.end() );
|
|||
|
|
|
|||
|
|
if( !fopen_s( &fp, szString, "wt" ) )
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ù<><C3B9><EFBFBD>ο<EFBFBD> <20>ְ<EFBFBD>
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "version %d\n", m_nCurrentVersion );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
|
|||
|
|
for(int i = 0; i < ( int )m_SkipNumber.size(); i++ )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "SkipNum %d\n", m_SkipNumber[i] );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
fclose( fp );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( !m_bAutoStart )
|
|||
|
|
{
|
|||
|
|
AfxMessageBox(_T("PatchInfoServer.cfg <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!!"));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#else // _ROLLBACK_PATCH
|
|||
|
|
FILE *fp;
|
|||
|
|
char szString[ 1024 ] = {0 ,};
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\PatchInfoServer.cfg", m_szPatchFolder.GetBuffer() );
|
|||
|
|
fopen_s( &fp, szString, "wt" );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%d", m_nCurrentVersion );
|
|||
|
|
fwrite(szString , strlen(szString)+1 , 1 , fp );
|
|||
|
|
// fputs( szString, fp );
|
|||
|
|
fclose( fp );
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::CleanupDir()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "CleanupDir" );
|
|||
|
|
char szString[ _MAX_PATH ], szCurDirectory[ _MAX_PATH ];
|
|||
|
|
|
|||
|
|
GetCurrentDirectory( _MAX_PATH, szCurDirectory );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\LoginServer", szCurDirectory );
|
|||
|
|
DeleteFolder( szString );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\MasterServer", szCurDirectory );
|
|||
|
|
DeleteFolder( szString );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\VillageServer", szCurDirectory );
|
|||
|
|
DeleteFolder( szString );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\GameServer", szCurDirectory );
|
|||
|
|
DeleteFolder( szString );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ǯ<><C7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>鶧 <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD> ..
|
|||
|
|
//<2F>ش<EFBFBD> UpdateFolder <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mapdata , resource , etc <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ǯ<><C7AE> <20>Ѵ<EFBFBD>.
|
|||
|
|
void CPatchBuilderDlg::BuildFullVersion()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "BuildFullVersion" );
|
|||
|
|
std::vector< std::string > vecResult;
|
|||
|
|
FindFileListInDirectory( m_szSVNUpdateFolder.GetBuffer(), "*.*", vecResult, false, true, true );
|
|||
|
|
|
|||
|
|
int i, nMainFolderLength, nCurrentFileSystem = 0;
|
|||
|
|
CEtPackingFile *pFileSystem = NULL;
|
|||
|
|
char szString[ _MAX_PATH ];
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\ClientFull", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
CreateFolder( szString );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\ClientFull\\Resource%02d.pak", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, nCurrentFileSystem );
|
|||
|
|
pFileSystem = new CEtPackingFile();
|
|||
|
|
pFileSystem->NewFileSystem( szString );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\ClientFull", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
nMainFolderLength = m_szSVNUpdateFolder.GetLength();
|
|||
|
|
for( i = 0; i < ( int )vecResult.size(); i++ )
|
|||
|
|
{
|
|||
|
|
char szPath[ _MAX_PATH ];
|
|||
|
|
_GetPath( szPath, vecResult[ i ].c_str() + nMainFolderLength + 1 );
|
|||
|
|
|
|||
|
|
pFileSystem->ChangeDir( "\\" );
|
|||
|
|
if( IsPatchFile( szPath ) )
|
|||
|
|
{
|
|||
|
|
pFileSystem->ChangeDir( szPath );
|
|||
|
|
pFileSystem->AddFile( vecResult[ i ].c_str() );
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> 512<31>ް<EFBFBD> <20>̻<EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
if( pFileSystem->GetFileSystemSize() > ( DWORD )DEFAULT_PACKING_FILE_SIZE )
|
|||
|
|
{
|
|||
|
|
char szNewFileSystem[ _MAX_PATH ];
|
|||
|
|
pFileSystem->CloseFileSystem();
|
|||
|
|
SAFE_DELETE( pFileSystem );
|
|||
|
|
pFileSystem = new CEtPackingFile();
|
|||
|
|
nCurrentFileSystem++;
|
|||
|
|
sprintf_s( szNewFileSystem, _MAX_PATH, "%s\\%08d\\ClientFull\\Resource%02d.pak", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, nCurrentFileSystem );
|
|||
|
|
pFileSystem->NewFileSystem( szNewFileSystem );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
char szFileName[ _MAX_PATH ], szFullName[ _MAX_PATH ];
|
|||
|
|
if( strlen( szPath ) <= 1 )
|
|||
|
|
{
|
|||
|
|
_GetFullFileName( szFileName, vecResult[ i ].c_str() );
|
|||
|
|
sprintf_s( szFullName, _MAX_PATH, "%s\\%s", szString, szFileName );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
sprintf_s( szFullName, _MAX_PATH, "%s\\%s", szString, szPath );
|
|||
|
|
CreateFolder( szFullName );
|
|||
|
|
sprintf_s( szFullName, _MAX_PATH, "%s\\%s", szString, vecResult[ i ].c_str() + nMainFolderLength + 1 );
|
|||
|
|
}
|
|||
|
|
CopyFile( vecResult[ i ].c_str(), szFullName, FALSE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char szMessage[ 1024 ];
|
|||
|
|
sprintf_s( szMessage, 1024, "Full Version <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4> %d%%", ( int )( i * 100 / vecResult.size() ) );
|
|||
|
|
SetWorkStatus( szMessage );
|
|||
|
|
}
|
|||
|
|
pFileSystem->CloseFileSystem();
|
|||
|
|
SAFE_DELETE( pFileSystem );
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\ClientFull\\Version.cfg", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
FILE *fp;
|
|||
|
|
fopen_s( &fp, szString, "wt" );
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "version %d\n", m_nCurrentVersion );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
fclose( fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::BuildVersion1()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "BuildVersion1" );
|
|||
|
|
std::string szPatchFolder;
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
|
|||
|
|
bool bDirectCopy = true;
|
|||
|
|
UpdateLastRevision();
|
|||
|
|
CopyServerPatch( bDirectCopy );
|
|||
|
|
CopyBuild( bDirectCopy );
|
|||
|
|
UpdatePatchInfo();
|
|||
|
|
BuildFullVersion();
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\%d-%d", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, 0, m_nLastRevision );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::SetWorkStatus( const char *pString )
|
|||
|
|
{
|
|||
|
|
SetDlgItemText( IDC_WORK_STATUS , pString );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::BuildPatch()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "BuildPatch Start!" );
|
|||
|
|
CTime PatchStartTime, PatchEndTime;
|
|||
|
|
PatchStartTime = CTime::GetCurrentTime();
|
|||
|
|
|
|||
|
|
std::string szPatchFolder;
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
//<2F><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<>϶<EFBFBD> <20><> <20>ѹ<EFBFBD><D1B9><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>..
|
|||
|
|
if( m_nCurrentVersion == 1 )
|
|||
|
|
{
|
|||
|
|
BuildVersion1();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SVNCleanUp();
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ ī<>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ش<D8B4><DEB6><EFBFBD> <20>ؼ<EFBFBD> true<75><65> <20>ٲ<EFBFBD><D9B2><EFBFBD>..
|
|||
|
|
bool bDirectCopy = true;
|
|||
|
|
GetModifyList();
|
|||
|
|
if( m_vecModifyFile.empty() && m_vecDeleteFile.empty() )
|
|||
|
|
{
|
|||
|
|
MessageBox( "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>" );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SaveListLog( "ModifyList.txt" );
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
|
|||
|
|
if( m_bUseRTPatch )
|
|||
|
|
{
|
|||
|
|
MakeTempFiles();
|
|||
|
|
}
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( m_bRollBack )
|
|||
|
|
RollBackPatch();
|
|||
|
|
}
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>. SVN UpdateFolder
|
|||
|
|
UpdateLastRevision();
|
|||
|
|
|
|||
|
|
#ifdef _ROLLBACK_PATCH
|
|||
|
|
if( m_bUseRTPatch )
|
|||
|
|
{
|
|||
|
|
if( m_bRollBack )
|
|||
|
|
RollBackRTPatch();
|
|||
|
|
}
|
|||
|
|
#endif // _ROLLBACK_PATCH
|
|||
|
|
|
|||
|
|
if( m_bCopyServerData )
|
|||
|
|
{
|
|||
|
|
CopyServerPatch( bDirectCopy );
|
|||
|
|
if(!CopyBuild( bDirectCopy ) )
|
|||
|
|
{
|
|||
|
|
if(!m_bAutoStart )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "RmakeCmd Fail ", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
MessageBox( szString );
|
|||
|
|
}
|
|||
|
|
PostMessage(WM_QUIT);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CreateDeleteList();
|
|||
|
|
|
|||
|
|
if( m_bUseRTPatch )
|
|||
|
|
{
|
|||
|
|
CString strPakFileName;
|
|||
|
|
strPakFileName.Format( "%s\\%08d\\Patch%08d.pak", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, m_nCurrentVersion );
|
|||
|
|
CString strOldFilePath;
|
|||
|
|
strOldFilePath.Format( "%s\\%08d\\Backup", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
|
|||
|
|
CreateRTPatch( m_vecModifyFile, strPakFileName, m_szSVNUpdateFolder, strOldFilePath, "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4> %d%%" );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CreatePatch();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
UpdatePatchInfo();
|
|||
|
|
|
|||
|
|
if( m_bMakeFullVersion )
|
|||
|
|
{
|
|||
|
|
BuildFullVersion();
|
|||
|
|
}
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\%d-%d", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, m_nStartRevision, m_nLastRevision );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
|
|||
|
|
#ifdef MANUAL_PATCH
|
|||
|
|
if( m_bManualPatch )
|
|||
|
|
{
|
|||
|
|
ManualPatch();
|
|||
|
|
}
|
|||
|
|
#endif // MANUAL_PATCH
|
|||
|
|
// MD5 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
CString strFilePath;
|
|||
|
|
strFilePath.Format( "%s\\%08d\\Patch%08d.pak", m_szPatchFolder.GetBuffer(), m_nCurrentVersion, m_nCurrentVersion );
|
|||
|
|
|
|||
|
|
CString strChecksum = CMD5Checksum::GetMD5( strFilePath );
|
|||
|
|
|
|||
|
|
CString strMD5FileName = strFilePath + ".MD5";
|
|||
|
|
FILE* stream = fopen( strMD5FileName.GetString(), "w+" );
|
|||
|
|
|
|||
|
|
if( stream )
|
|||
|
|
{
|
|||
|
|
fseek( stream, 0L, SEEK_SET );
|
|||
|
|
fprintf_s( stream, strChecksum.GetString() );
|
|||
|
|
fprintf_s( stream, "\n" );
|
|||
|
|
fclose( stream );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CleanupDir();
|
|||
|
|
if( !m_bAutoStart )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "%s\\%08d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!!", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
MessageBox( szString );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog( "BuildPatch End!" );
|
|||
|
|
|
|||
|
|
PatchEndTime = CTime::GetCurrentTime();
|
|||
|
|
CTimeSpan PatchDurationTime = PatchEndTime - PatchStartTime;
|
|||
|
|
|
|||
|
|
TCHAR szTotal[2048] = _T("");
|
|||
|
|
ZeroMemory( szTotal, sizeof(TCHAR) * 2048 );
|
|||
|
|
if( PatchDurationTime.GetHours() > 0 )
|
|||
|
|
_sntprintf_s( szTotal, 2048, _T( "%02d<32>ð<EFBFBD> %02d <20><> %02d <20><>" ), PatchDurationTime.GetHours(), PatchDurationTime.GetMinutes(), PatchDurationTime.GetSeconds() );
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( PatchDurationTime.GetMinutes() > 0 )
|
|||
|
|
_sntprintf_s( szTotal, 2048, _T( "%02d <20><> %02d <20><>" ), PatchDurationTime.GetMinutes(), PatchDurationTime.GetSeconds() );
|
|||
|
|
else
|
|||
|
|
_sntprintf_s( szTotal, 2048, _T( "%02d <20><>" ), PatchDurationTime.GetSeconds() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( m_bUseRTPatch )
|
|||
|
|
LogWnd::TraceLog( "UseRTPatch (O) - Patch Duration : %s", szTotal );
|
|||
|
|
else
|
|||
|
|
LogWnd::TraceLog( "UseRTPatch (X) - Patch Duration : %s", szTotal );
|
|||
|
|
|
|||
|
|
PostMessage( WM_QUIT );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::SVNCleanUp()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "SVNCleanUp" );
|
|||
|
|
SetWorkStatus( "SVN<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>" );
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
SHELLEXECUTEINFO ShellExecInfo;
|
|||
|
|
|
|||
|
|
memset( &ShellExecInfo, 0, sizeof( SHELLEXECUTEINFO ) );
|
|||
|
|
ShellExecInfo.cbSize = sizeof( SHELLEXECUTEINFO );
|
|||
|
|
ShellExecInfo.hwnd = GetSafeHwnd();
|
|||
|
|
ShellExecInfo.lpFile = "svn";
|
|||
|
|
ShellExecInfo.nShow = SW_SHOW;
|
|||
|
|
ShellExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE;
|
|||
|
|
ShellExecInfo.lpVerb = __TEXT( "open" );
|
|||
|
|
ShellExecInfo.lpParameters = szString;
|
|||
|
|
|
|||
|
|
#ifdef DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "cleanup %s --username hicom15 --password 6326", m_szSVNUpdateFolder.GetBuffer() );
|
|||
|
|
#else // DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "cleanup %s --username build --password b@0625", m_szSVNUpdateFolder.GetBuffer() );
|
|||
|
|
#endif // DH_SELF_TEST
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
UINT AFX_CDECL _BuildPatchThread( LPVOID Param )
|
|||
|
|
{
|
|||
|
|
CPatchBuilderDlg *pMainDlg = ( CPatchBuilderDlg * )AfxGetApp()->m_pMainWnd;
|
|||
|
|
if ( pMainDlg )
|
|||
|
|
{
|
|||
|
|
pMainDlg->BuildPatch();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::ManualPatch()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "ManualPatch" );
|
|||
|
|
#ifdef MANUAL_PATCH
|
|||
|
|
USES_CONVERSION;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<>ΰ<EFBFBD><CEB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵ<EFBFBD><C8B5><EFBFBD>.
|
|||
|
|
if(m_nCurrentVersion == 1)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
int nManualPatchTargetStartVer = 0;
|
|||
|
|
int nManualPatchTargetEndVer = 0;
|
|||
|
|
if( m_nManualPatchTargetStartVer > 0 && m_nManualPatchTargetEndVer > 0 && m_nManualPatchTargetEndVer > m_nManualPatchTargetStartVer )
|
|||
|
|
{
|
|||
|
|
nManualPatchTargetStartVer = m_nManualPatchTargetStartVer;
|
|||
|
|
nManualPatchTargetEndVer = m_nManualPatchTargetEndVer;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
nManualPatchTargetStartVer = m_nCurrentVersion - 1;
|
|||
|
|
nManualPatchTargetEndVer = m_nCurrentVersion;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog( "ManualPatch StartVer:%d, EndVer:%d", nManualPatchTargetStartVer, nManualPatchTargetEndVer );
|
|||
|
|
|
|||
|
|
m_pDnAttachFile = new CDnAttachFile;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>鰡<EFBFBD><E9B0A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ġ <20>ϴºκ<C2BA><CEBA><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۿ´<DBBF>.
|
|||
|
|
CStringA szTxt , szPak;
|
|||
|
|
CStringA szPatchFolder;
|
|||
|
|
|
|||
|
|
szPatchFolder.Format( "%s\\%08d\\" ,m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
|
|||
|
|
CStringA szManualPatchFolder, szPatchExecutePath;
|
|||
|
|
szManualPatchFolder.Format( "%s%s", szPatchFolder.GetBuffer(), "ManualPatch" );
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CreateFolder( szManualPatchFolder.GetBuffer() );
|
|||
|
|
szPatchExecutePath.Format( "%s\\DNUpdater_%dto%d.exe", szManualPatchFolder.GetBuffer(), nManualPatchTargetStartVer, nManualPatchTargetEndVer );
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20>̾Ƴ<CCBE> <20><><EFBFBD><EFBFBD>
|
|||
|
|
if( !m_bAutoStart )
|
|||
|
|
{
|
|||
|
|
MessageBox( m_szManualPatchExe.GetBuffer() );
|
|||
|
|
MessageBox( szPatchExecutePath.GetBuffer() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog( "--- %s, %s", m_szManualPatchExe.GetBuffer(), szPatchExecutePath.GetBuffer() );
|
|||
|
|
|
|||
|
|
if( !m_pDnAttachFile->Create( m_szManualPatchExe.GetBuffer(), szPatchExecutePath.GetBuffer() ) )
|
|||
|
|
{
|
|||
|
|
if( !m_bAutoStart )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> %s, %s", m_szManualPatchExe.GetBuffer(), szPatchExecutePath.GetBuffer() );
|
|||
|
|
MessageBox( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD>" );
|
|||
|
|
SAFE_DELETE( m_pDnAttachFile );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
m_pDnAttachFile->WriteVersion( nManualPatchTargetStartVer, nManualPatchTargetEndVer );
|
|||
|
|
|
|||
|
|
szTxt.Format( "Patch%08d.txt", m_nCurrentVersion );
|
|||
|
|
szPak.Format( "Patch%08d.pak", m_nCurrentVersion );
|
|||
|
|
|
|||
|
|
char szMessage[ 1024 ];
|
|||
|
|
sprintf_s( szMessage, 1024, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Դϴ<D4B4>." );
|
|||
|
|
SetWorkStatus( szMessage );
|
|||
|
|
|
|||
|
|
if( !m_pDnAttachFile->AttachFile( szPatchFolder.GetBuffer(), szTxt.GetBuffer() ) )
|
|||
|
|
{
|
|||
|
|
if( !m_bAutoStart )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %s, %s", szPatchFolder.GetBuffer(), szTxt.GetBuffer() );
|
|||
|
|
MessageBox( "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" );
|
|||
|
|
SAFE_DELETE( m_pDnAttachFile );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_pDnAttachFile->AttachFile( szPatchFolder.GetBuffer(), szPak.GetBuffer() );
|
|||
|
|
m_pDnAttachFile->Close();
|
|||
|
|
|
|||
|
|
sprintf_s( szMessage, 1024, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>!!" );
|
|||
|
|
SetWorkStatus( szMessage );
|
|||
|
|
|
|||
|
|
SAFE_DELETE( m_pDnAttachFile );
|
|||
|
|
#endif // MANUAL_PATCH
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedBuild()
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
|
|||
|
|
if( m_nStartRevision >= m_nLastRevision )
|
|||
|
|
{
|
|||
|
|
MessageBox( "Revision <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>.." );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if( m_nCurrentVersion <= 0 )
|
|||
|
|
{
|
|||
|
|
MessageBox( "<EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Դϴ<D4B4>." );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GetDlgItem( ID_BUILD )->EnableWindow( FALSE );
|
|||
|
|
|
|||
|
|
CleanupDir();
|
|||
|
|
|
|||
|
|
if( m_szSVNUrl[ m_szSVNUrl.GetLength() - 1 ] == '\\' )
|
|||
|
|
{
|
|||
|
|
m_szSVNUrl.Delete( m_szSVNUrl.GetLength() - 1 );
|
|||
|
|
}
|
|||
|
|
if( m_szSVNUpdateFolder[ m_szSVNUpdateFolder.GetLength() - 1 ] == '\\' )
|
|||
|
|
{
|
|||
|
|
m_szSVNUpdateFolder.Delete( m_szSVNUpdateFolder.GetLength() - 1 );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AfxBeginThread( _BuildPatchThread, GetSafeHwnd() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedExit()
|
|||
|
|
{
|
|||
|
|
OnCancel();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//SVN <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BOOL CPatchBuilderDlg::CheckSVNInfo( int nProfileIndex )
|
|||
|
|
{
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
SProfile *pProfile = CRegProfile::GetInstance().GetProfile( nProfileIndex );
|
|||
|
|
|
|||
|
|
#ifdef DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "svn info %s -r HEAD --xml --username hicom15 --password 6326", pProfile->szSVNUrl.c_str() );
|
|||
|
|
#else // DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "svn info %s -r HEAD --xml --username build --password b@0625", pProfile->szSVNUrl.c_str() );
|
|||
|
|
#endif // DH_SELF_TEST
|
|||
|
|
|
|||
|
|
std::string szOutput;
|
|||
|
|
if( ExecCommand( szString, &szOutput ) )
|
|||
|
|
{
|
|||
|
|
TiXmlDocument Document;
|
|||
|
|
Document.Parse( szOutput.c_str(), 0, TIXML_ENCODING_UTF8 );
|
|||
|
|
if ( !Document.Error() )
|
|||
|
|
{
|
|||
|
|
Document.FirstChildElement( "info" )->FirstChildElement( "entry" )->FirstChildElement( "commit" )->QueryIntAttribute( "revision", &m_nLastRevision );
|
|||
|
|
std::string szURL = Document.FirstChildElement( "info" )->FirstChildElement( "entry" )->FirstChildElement( "url" )->GetText();
|
|||
|
|
std::string szRoot = Document.FirstChildElement( "info" )->FirstChildElement( "entry" )->FirstChildElement( "repository" )->FirstChildElement( "root" )->GetText();
|
|||
|
|
m_szMainFolder = szURL.c_str() + strlen( szRoot.c_str() );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
MessageBox( szOutput.c_str() );
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
MessageBox( "svn info <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>! svn Ŀ<>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD> <20>ν<EFBFBD><CEBD><EFBFBD> <20>Ǿ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> Ȯ<><C8AE> <20><><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>" );
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::CheckPatchFolder()
|
|||
|
|
{
|
|||
|
|
std::vector< std::string > szVecResult;
|
|||
|
|
std::string szLastPatchFolder;
|
|||
|
|
|
|||
|
|
szLastPatchFolder = m_szPatchFolder.GetBuffer();
|
|||
|
|
|
|||
|
|
CreateFolder( szLastPatchFolder.c_str() );
|
|||
|
|
_FindFolder( szLastPatchFolder.c_str(), szVecResult, false, NULL );
|
|||
|
|
m_nCurrentVersion = 1;
|
|||
|
|
if( szVecResult.empty() )
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool bDeleteFolder = false;
|
|||
|
|
int i;
|
|||
|
|
std::sort( szVecResult.begin(), szVecResult.end() );
|
|||
|
|
for( i = ( int )szVecResult.size() - 1; i >= 0; i-- )
|
|||
|
|
{
|
|||
|
|
szLastPatchFolder = m_szPatchFolder.GetBuffer();
|
|||
|
|
szLastPatchFolder += "\\";
|
|||
|
|
szLastPatchFolder += szVecResult[ i ];
|
|||
|
|
|
|||
|
|
std::vector< std::string > szVecRevision;
|
|||
|
|
_FindFolder( szLastPatchFolder.c_str(), szVecRevision, false, NULL );
|
|||
|
|
std::sort( szVecRevision.begin(), szVecRevision.end() );
|
|||
|
|
if( !szVecRevision.empty() )
|
|||
|
|
{
|
|||
|
|
const char *pFindPtr = strchr( szVecRevision[ 0 ].c_str(), '-' );
|
|||
|
|
if( pFindPtr )
|
|||
|
|
{
|
|||
|
|
if( bDeleteFolder )
|
|||
|
|
{
|
|||
|
|
m_nCurrentVersion = atoi( szVecResult[ i ].c_str() );
|
|||
|
|
UpdatePatchInfo();
|
|||
|
|
}
|
|||
|
|
m_nStartRevision = atoi( pFindPtr + 1 );
|
|||
|
|
m_nCurrentVersion = atoi( szVecResult[ i ].c_str() ) +1;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
sprintf_s( szString, 1024, "%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Դϴ<D4B4>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?", szLastPatchFolder.c_str() );
|
|||
|
|
if(!m_bAutoStart)
|
|||
|
|
{
|
|||
|
|
if( MessageBox( szString, NULL, MB_YESNO ) == IDYES )
|
|||
|
|
{
|
|||
|
|
DeleteFolder( szLastPatchFolder.c_str() );
|
|||
|
|
bDeleteFolder = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
DeleteFolder( szLastPatchFolder.c_str() );
|
|||
|
|
bDeleteFolder = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::RollPacking()
|
|||
|
|
{
|
|||
|
|
CEtPackingFile FileSystem;
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH , "%s\\%08d" , m_szRollPatchFolder.GetBuffer() , m_nCurrentVersion+1 );
|
|||
|
|
CreateDirectory(szString , NULL );
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\Patch%08d.pak", m_szRollPatchFolder.GetBuffer(),m_nCurrentVersion+1 ,m_nCurrentVersion+1 );
|
|||
|
|
|
|||
|
|
FileSystem.NewFileSystem( szString );
|
|||
|
|
|
|||
|
|
std::sort( m_vecRestoreFile.begin(), m_vecRestoreFile.end() );
|
|||
|
|
|
|||
|
|
for( int i = 0; i < ( int )m_vecRestoreFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
char szPath[ _MAX_PATH ], szFileName[ _MAX_PATH ];
|
|||
|
|
_GetPath( szPath, m_vecRestoreFile[ i ].c_str() );
|
|||
|
|
sprintf_s( szFileName, _MAX_PATH, "%s\\%s", m_szRollTempFolder.GetBuffer(), m_vecRestoreFile[ i ].c_str() );
|
|||
|
|
|
|||
|
|
FileSystem.ChangeDir( "\\" );
|
|||
|
|
|
|||
|
|
if( szPath[ 0 ] )
|
|||
|
|
{
|
|||
|
|
FileSystem.ChangeDir( szPath );
|
|||
|
|
}
|
|||
|
|
FileSystem.AddFile( szFileName );
|
|||
|
|
|
|||
|
|
char szMessage[ 1024 ];
|
|||
|
|
sprintf_s( szMessage, 1024, "<EFBFBD>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4> %d%%", ( int )( i * 100 / m_vecRestoreFile.size() ) );
|
|||
|
|
SetWorkStatus( szMessage );
|
|||
|
|
}
|
|||
|
|
FileSystem.CloseFileSystem();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::RollSaveVersion()
|
|||
|
|
{
|
|||
|
|
FILE *fp;
|
|||
|
|
char szString[ 1024 ] = {0,};
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\PatchInfoServer.cfg", m_szRollPatchFolder.GetBuffer() );
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ŵ<EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
m_SkipNumber.push_back(m_nCurrentVersion);
|
|||
|
|
std::sort(m_SkipNumber.begin() , m_SkipNumber.end());
|
|||
|
|
|
|||
|
|
if( !fopen_s( &fp, szString, "wt" ) )
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ù<><C3B9><EFBFBD>ο<EFBFBD> <20>ְ<EFBFBD>
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "version %d\n", m_nCurrentVersion+1 );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
|
|||
|
|
for(int i = 0; i < ( int )m_SkipNumber.size(); i++ )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "SkipNum %d\n", m_SkipNumber[i] );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
fclose( fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ŵ<EFBFBD>ѹ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
for(int i = 0; i < (int)m_SkipNumber.size() ;i++)
|
|||
|
|
{
|
|||
|
|
if( m_SkipNumber[i] == m_nCurrentVersion )
|
|||
|
|
{
|
|||
|
|
m_SkipNumber.erase(m_SkipNumber.begin()+i);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::RollBackCopyFile()
|
|||
|
|
{
|
|||
|
|
char szMessage[1024]={0,};
|
|||
|
|
char szString[1024]={0,};
|
|||
|
|
std::string SrcFile , DstFile;
|
|||
|
|
std::string szRollPatchFolder , szRollSvnUpdateFolder ;
|
|||
|
|
std::string szRollPatchTempFolder;
|
|||
|
|
|
|||
|
|
//<2F>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\RollBack", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
m_szRollPatchFolder = szString;
|
|||
|
|
|
|||
|
|
//<2F>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƿ´<C6BF>.
|
|||
|
|
sprintf_s( szString , _MAX_PATH , "%s\\Temp", m_szRollPatchFolder.GetBuffer() );
|
|||
|
|
CreateDirectory(szString , NULL );
|
|||
|
|
m_szRollTempFolder = szString;
|
|||
|
|
|
|||
|
|
szRollPatchTempFolder = m_szRollTempFolder.GetBuffer() ;
|
|||
|
|
szRollSvnUpdateFolder = m_szSVNUpdateFolder.GetBuffer();
|
|||
|
|
szRollPatchFolder = m_szRollPatchFolder.GetBuffer();
|
|||
|
|
|
|||
|
|
SHELLEXECUTEINFO ShellExecInfo;
|
|||
|
|
memset( &ShellExecInfo, 0, sizeof( SHELLEXECUTEINFO ) );
|
|||
|
|
ShellExecInfo.cbSize = sizeof( SHELLEXECUTEINFO );
|
|||
|
|
ShellExecInfo.hwnd = GetSafeHwnd();
|
|||
|
|
ShellExecInfo.lpFile = "svn";
|
|||
|
|
ShellExecInfo.nShow = SW_HIDE;
|
|||
|
|
ShellExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE;
|
|||
|
|
ShellExecInfo.lpVerb = __TEXT( "open" );
|
|||
|
|
ShellExecInfo.lpParameters = szString;
|
|||
|
|
|
|||
|
|
for(int i =0 ; i < (int)m_vecRestoreFile.size() ; ++i )
|
|||
|
|
{
|
|||
|
|
SrcFile = szRollSvnUpdateFolder + "\\" +m_vecRestoreFile[i];
|
|||
|
|
DstFile = szRollPatchTempFolder + "\\" +m_vecRestoreFile[i];
|
|||
|
|
|
|||
|
|
std::string StrChange , SVNPath;
|
|||
|
|
StrChange = m_vecRestoreFile[i];
|
|||
|
|
|
|||
|
|
char szPath[1024] = {0 , };
|
|||
|
|
_GetPath( szPath, DstFile.c_str() );
|
|||
|
|
CreateFolder(szPath);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD> ī<><C4AB><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
if( CopyFile( SrcFile.c_str() , DstFile.c_str() , FALSE ) == 0 )
|
|||
|
|
{
|
|||
|
|
CopyFile( SrcFile.c_str() , DstFile.c_str() , FALSE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::RollCreateDeleteList()
|
|||
|
|
{
|
|||
|
|
int i;
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
FILE *fp;
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\Patch%08d.txt", m_szRollPatchFolder.GetBuffer(),m_nCurrentVersion+1 ,m_nCurrentVersion+1 );
|
|||
|
|
|
|||
|
|
fopen_s( &fp, szString, "wt" );
|
|||
|
|
for( i = 0; i < ( int )m_vecRollDeleteFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
WCHAR wszBuffer[ _MAX_PATH ];
|
|||
|
|
char szTemp[ _MAX_PATH ];
|
|||
|
|
MultiByteToWideChar( CP_UTF8, 0, m_vecRollDeleteFile[ i ].c_str(), -1, wszBuffer, _MAX_PATH );
|
|||
|
|
WideCharToMultiByte( CP_ACP, 0, wszBuffer, -1, szTemp, _MAX_PATH, NULL, NULL );
|
|||
|
|
|
|||
|
|
sprintf_s( szString, 1024, "D %s\n", szTemp );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int bFindLauncher = false;
|
|||
|
|
for( i = 0; i < ( int )m_vecRestoreFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
if( _stricmp( m_vecRestoreFile[ i ].c_str(), "DNLauncher.exe" ) == 0 )
|
|||
|
|
{
|
|||
|
|
m_vecRestoreFile.erase( m_vecRestoreFile.begin() + i );
|
|||
|
|
bFindLauncher = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if( bFindLauncher )
|
|||
|
|
{
|
|||
|
|
m_vecRestoreFile.push_back( "DNLauncher.exe" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for( i = 0; i < ( int )m_vecRestoreFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
if( IsPatchFile( m_vecRestoreFile[ i ].c_str() ) )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "P %s\n", m_vecRestoreFile[ i ].c_str() );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, 1024, "C %s\n", m_vecRestoreFile[ i ].c_str() );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// <20>ƹ<EFBFBD><C6B9>͵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD>Ʈ¥<C6AE><C2A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD>.. <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> <20>ȵɼ<C8B5><C9BC><EFBFBD> <20>־. <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20>־<EFBFBD><D6BE>ش<EFBFBD>.
|
|||
|
|
fputs( " ", fp );
|
|||
|
|
fclose( fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::RollBackPatch()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "RollBackPatch" );
|
|||
|
|
|
|||
|
|
RollBackCopyFile();
|
|||
|
|
RollPacking();
|
|||
|
|
RollCreateDeleteList();
|
|||
|
|
|
|||
|
|
DeleteFolder(m_szRollTempFolder.GetBuffer());
|
|||
|
|
|
|||
|
|
char szString[1024]={0,};
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\%d-%d", m_szRollPatchFolder.GetBuffer(), m_nCurrentVersion+1 ,m_nStartRevision, m_nStartRevision );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
|
|||
|
|
//<2F>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ŵ<EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>..
|
|||
|
|
RollSaveVersion();
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::RollBackRTPatch()
|
|||
|
|
{
|
|||
|
|
char szString[1024];
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\RollBack", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
m_szRollPatchFolder = szString;
|
|||
|
|
sprintf_s( szString, _MAX_PATH , "%s\\%08d", m_szRollPatchFolder.GetBuffer(), m_nCurrentVersion+1 );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
CString strPakFileName;
|
|||
|
|
strPakFileName.Format( "%s\\%08d\\Patch%08d.pak", m_szRollPatchFolder.GetBuffer(), m_nCurrentVersion + 1, m_nCurrentVersion + 1 );
|
|||
|
|
CString strNewFilePath;
|
|||
|
|
strNewFilePath.Format( "%s\\%08d\\Backup", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
|
|||
|
|
CreateRTPatch( m_vecRestoreFile, strPakFileName, strNewFilePath, m_szSVNUpdateFolder, "<EFBFBD>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4> %d%%" );
|
|||
|
|
RollCreateDeleteList();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\%d-%d", m_szRollPatchFolder.GetBuffer(), m_nCurrentVersion + 1, m_nStartRevision, m_nStartRevision );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
|
|||
|
|
//<2F>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ŵ<EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>..
|
|||
|
|
RollSaveVersion();
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CPatchBuilderDlg::FileExistName(char *Path)
|
|||
|
|
{
|
|||
|
|
if( ::GetFileAttributes( Path ) == 0xFFFFFFFF )
|
|||
|
|
return FALSE;
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::GetModuleRoot()
|
|||
|
|
{
|
|||
|
|
GetModuleFileNameA(NULL, m_szModuleRoot, MAX_PATH);
|
|||
|
|
int i=0 ;
|
|||
|
|
|
|||
|
|
for( i = ( lstrlenA( m_szModuleRoot) - 1 ); i >= 0; --i )
|
|||
|
|
{
|
|||
|
|
if( m_szModuleRoot[i] == '\\' || m_szModuleRoot[i] == '/' )
|
|||
|
|
{
|
|||
|
|
m_szModuleRoot[i] = '\0';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( i < 0 )
|
|||
|
|
{
|
|||
|
|
i = 0;
|
|||
|
|
m_szModuleRoot[i] = '\0';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::OnBnClickedIdcManualFolderBrowse2()
|
|||
|
|
{
|
|||
|
|
CFileDialog FileDlg( TRUE, "*.exe", "*.*" );
|
|||
|
|
if( FileDlg.DoModal() == IDOK )
|
|||
|
|
{
|
|||
|
|
m_szManualPatchExe = FileDlg.m_ofn.lpstrFile;
|
|||
|
|
UpdateData( FALSE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::MakeTempFiles()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "MakeTempFiles" );
|
|||
|
|
SetWorkStatus( "Backup Files <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>" );
|
|||
|
|
|
|||
|
|
char szString[ 1024 ];
|
|||
|
|
SHELLEXECUTEINFO ShellExecInfo;
|
|||
|
|
|
|||
|
|
memset( &ShellExecInfo, 0, sizeof( SHELLEXECUTEINFO ) );
|
|||
|
|
ShellExecInfo.cbSize = sizeof( SHELLEXECUTEINFO );
|
|||
|
|
ShellExecInfo.hwnd = GetSafeHwnd();
|
|||
|
|
ShellExecInfo.lpFile = "svn";
|
|||
|
|
ShellExecInfo.nShow = SW_SHOW;
|
|||
|
|
ShellExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE;
|
|||
|
|
ShellExecInfo.lpVerb = __TEXT( "open" );
|
|||
|
|
ShellExecInfo.lpParameters = szString;
|
|||
|
|
|
|||
|
|
#ifdef DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "update %s -r %d --username hicom15 --password 6326", m_szSVNUpdateFolder.GetBuffer(), m_nStartRevision );
|
|||
|
|
#else // DH_SELF_TEST
|
|||
|
|
sprintf_s( szString, 1024, "update %s -r %d --username build --password b@0625", m_szSVNUpdateFolder.GetBuffer(), m_nStartRevision );
|
|||
|
|
#endif // DH_SELF_TEST
|
|||
|
|
LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char szMessage[1024]={0,};
|
|||
|
|
std::string SrcFile , DstFile;
|
|||
|
|
std::string szP4UpdateFolder;
|
|||
|
|
std::string szPatchBackupFolder;
|
|||
|
|
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%08d\\Backup", m_szPatchFolder.GetBuffer(), m_nCurrentVersion );
|
|||
|
|
CreateDirectory( szString, NULL );
|
|||
|
|
|
|||
|
|
szPatchBackupFolder = szString;
|
|||
|
|
szP4UpdateFolder = m_szSVNUpdateFolder.GetBuffer();
|
|||
|
|
|
|||
|
|
for( int i=0; i<(int)m_vecRestoreFile.size(); i++ )
|
|||
|
|
{
|
|||
|
|
SrcFile = szP4UpdateFolder + "\\" + m_vecRestoreFile[i];
|
|||
|
|
DstFile = szPatchBackupFolder + "\\" + m_vecRestoreFile[i];
|
|||
|
|
|
|||
|
|
std::string StrChange;
|
|||
|
|
StrChange = m_vecRestoreFile[i];
|
|||
|
|
|
|||
|
|
char szPath[1024] = {0 , };
|
|||
|
|
_GetPath( szPath, DstFile.c_str() );
|
|||
|
|
CreateFolder( szPath );
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD> ī<><C4AB><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
if( CopyFile( SrcFile.c_str() , DstFile.c_str() , FALSE ) == 0 )
|
|||
|
|
{
|
|||
|
|
CopyFile( SrcFile.c_str() , DstFile.c_str() , FALSE );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::CreateRTPatch( std::vector<std::string>& vecFileList, LPCTSTR strPakFileName,
|
|||
|
|
LPCTSTR strNewFilePath, LPCTSTR strOldFilePath, LPCTSTR strMessage )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "CreateRTPatch" );
|
|||
|
|
char szMessage[1024];
|
|||
|
|
sprintf_s( szMessage, 1024, strMessage, 0 );
|
|||
|
|
SetWorkStatus( szMessage );
|
|||
|
|
|
|||
|
|
DeleteFolder( "RTPatchFileTemp" );
|
|||
|
|
CreateFolder( "RTPatchFileTemp" );
|
|||
|
|
|
|||
|
|
char szString[1024];
|
|||
|
|
CEtPackingFile FileSystem;
|
|||
|
|
FileSystem.NewFileSystem( strPakFileName );
|
|||
|
|
std::sort( vecFileList.begin(), vecFileList.end() );
|
|||
|
|
|
|||
|
|
for( int i=0; i<(int)vecFileList.size(); i++ )
|
|||
|
|
{
|
|||
|
|
char szPath[_MAX_PATH], szNewFile[_MAX_PATH], szOldFile[_MAX_PATH];
|
|||
|
|
char szFullFileName[1024];
|
|||
|
|
|
|||
|
|
_GetPath( szPath,,2 vecFileList[i].c_str() );
|
|||
|
|
_GetFullFileName( szFullFileName,256, vecFileList[i].c_str() );
|
|||
|
|
sprintf_s( szNewFile, _MAX_PATH, "%s\\%s", strNewFilePath, vecFileList[i].c_str() );
|
|||
|
|
sprintf_s( szOldFile, _MAX_PATH, "%s\\%s", strOldFilePath, vecFileList[i].c_str() );
|
|||
|
|
|
|||
|
|
// 1. OldFile <20><><EFBFBD>ٸ<EFBFBD> ADD<44><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><>
|
|||
|
|
BOOL bOldFileExist = FileExistName( szOldFile );
|
|||
|
|
if( !FileExistName( szNewFile ) ) // NewFile<6C><65> <20><><EFBFBD>ٸ<EFBFBD> Erroró<72><C3B3>
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( "%s Patch File is not Exist!!!", szNewFile );
|
|||
|
|
ASSERT( "Patch File is not Exist!!!" );
|
|||
|
|
FileSystem.CloseFileSystem();
|
|||
|
|
DeleteFile( strPakFileName );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 2. patchbld <20><><EFBFBD><EFBFBD> rtp<74><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
SHELLEXECUTEINFO ShellExecInfo;
|
|||
|
|
|
|||
|
|
memset( &ShellExecInfo, 0, sizeof( SHELLEXECUTEINFO ) );
|
|||
|
|
ShellExecInfo.cbSize = sizeof( SHELLEXECUTEINFO );
|
|||
|
|
ShellExecInfo.hwnd = GetSafeHwnd();
|
|||
|
|
ShellExecInfo.lpFile = "patchbld";
|
|||
|
|
ShellExecInfo.nShow = SW_HIDE;
|
|||
|
|
ShellExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE;
|
|||
|
|
ShellExecInfo.lpVerb = __TEXT( "open" );
|
|||
|
|
ShellExecInfo.lpParameters = szString;
|
|||
|
|
|
|||
|
|
if( bOldFileExist )
|
|||
|
|
sprintf_s( szString, 1024, "/O:RTPatchFileTemp\\TEMP.RTP \"%s\" \"%s\"", szOldFile, szNewFile );
|
|||
|
|
else
|
|||
|
|
sprintf_s( szString, 1024, "/O:RTPatchFileTemp\\TEMP.RTP \"%s\"", szNewFile );
|
|||
|
|
|
|||
|
|
// LogWnd::TraceLog( "Command:%s", szString );
|
|||
|
|
|
|||
|
|
if( ShellExecuteEx( &ShellExecInfo ) )
|
|||
|
|
{
|
|||
|
|
::WaitForSingleObject( ShellExecInfo.hProcess, INFINITE );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RTP<54><50><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Ȯ<><C8AE><EFBFBD><EFBFBD> .rtp<74><70> <20><><EFBFBD><EFBFBD>)
|
|||
|
|
char szRename[_MAX_PATH];
|
|||
|
|
sprintf_s( szRename, _MAX_PATH, "RTPatchFileTemp\\%s.rtp", szFullFileName );
|
|||
|
|
rename( "RTPatchFileTemp\\TEMP.RTP", szRename );
|
|||
|
|
|
|||
|
|
FileSystem.ChangeDir( "\\" );
|
|||
|
|
if( szPath[0] )
|
|||
|
|
{
|
|||
|
|
FileSystem.ChangeDir( szPath );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 4. RTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD> <20>߰<EFBFBD>
|
|||
|
|
FileSystem.AddFile( szRename );
|
|||
|
|
DeleteFile( szRename );
|
|||
|
|
|
|||
|
|
sprintf_s( szMessage, 1024, strMessage, ( int )( i * 100 / m_vecModifyFile.size() ) );
|
|||
|
|
SetWorkStatus( szMessage );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FileSystem.CloseFileSystem();
|
|||
|
|
|
|||
|
|
// 5. <20><><EFBFBD><EFBFBD>
|
|||
|
|
DeleteFolder( "RTPatchFileTemp" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPatchBuilderDlg::SaveListLog( LPCTSTR strFileName )
|
|||
|
|
{
|
|||
|
|
char szString[ _MAX_PATH ], szCurDirectory[ _MAX_PATH ];
|
|||
|
|
GetCurrentDirectory( _MAX_PATH, szCurDirectory );
|
|||
|
|
|
|||
|
|
FILE *fp;
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\\%s", szCurDirectory, strFileName );
|
|||
|
|
fopen_s( &fp, szString, "wt" );
|
|||
|
|
|
|||
|
|
fputs( "\n< ModifyListFile >\n", fp );
|
|||
|
|
std::vector<std::string>::iterator iter = m_vecModifyFile.begin();
|
|||
|
|
for( ; iter != m_vecModifyFile.end(); iter++ )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\n", (*iter).c_str() );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fputs( "\n< DeleteFileList >\n", fp );
|
|||
|
|
iter = m_vecDeleteFile.begin();
|
|||
|
|
for( ; iter != m_vecDeleteFile.end(); iter++ )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\n", (*iter).c_str() );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fputs( "\n< RestoreFileList >\n", fp );
|
|||
|
|
iter = m_vecRestoreFile.begin();
|
|||
|
|
for( ; iter != m_vecRestoreFile.end(); iter++ )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\n", (*iter).c_str() );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fputs( "\n< RollDeletFileList >\n", fp );
|
|||
|
|
iter = m_vecRollDeleteFile.begin();
|
|||
|
|
for( ; iter != m_vecRollDeleteFile.end(); iter++ )
|
|||
|
|
{
|
|||
|
|
sprintf_s( szString, _MAX_PATH, "%s\n", (*iter).c_str() );
|
|||
|
|
fputs( szString, fp );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fclose( fp );
|
|||
|
|
}
|
|||
|
|
|