ultimatepp/bazaar/SvnTest/main.cpp
mdelfede ad3ced97b7 SVN Library -- first release + test app
git-svn-id: svn://ultimatepp.org/upp/trunk@299 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-06-15 00:53:12 +00:00

269 lines
7.7 KiB
C++

#include "SvnTest.h"
///////////////////////////////////////////////////////////////////////////////////////////////
// constructor
SvnTest::SvnTest()
{
// initializes repository and local copy locations
DestPath = "/tmp/svn-test";
RepositoryUrl = "https://upp.svn.sourceforge.net/svnroot/upp/trunk/linux_scripts";
// connects the layout
CtrlLayout(*this, "Window title");
// sets up handlers
CheckoutButton <<= THISBACK(Checkout);
ConnectButton <<= THISBACK(Connect);
DisconnectButton <<= THISBACK(Disconnect);
ModifyButton <<= THISBACK(Modify);
LogButton <<= THISBACK(GetLog);
StatusButton <<= THISBACK(GetStatus);
ListButton <<= THISBACK(ListFiles);
WipeButton <<= THISBACK(WipeFolder);
QuitButton <<= THISBACK(Quit);
}
///////////////////////////////////////////////////////////////////////////////////////////////
// handlers
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::Checkout(void)
{
// clears text area
TextArea.Clear();
// sets up a welcome message
TextArea.Set(TextArea.Get() + "Checking out '" + RepositoryUrl + "' repository... please wait\n\n");
TextArea.Sync();
// error if already connected
if(svn.IsConnected())
{
ShowError("Already connected!!!");
return;
}
// connects to repository
if(svn.Checkout(RepositoryUrl, DestPath) == Svn::Ok)
{
StringStream s;
s << "Local path : " << svn.GetLocalPath() << "\n";
s << "Repository root : " << svn.GetRepositoryRoot() << "\n";
s << "Checked in revision : " << AsString(svn.GetCheckedRevision()) << "\n";
s << "Author : " << svn.GetCheckedRevisionAuthor() << "\n";
s << "Head revision : " << svn.GetHeadRevision() << "\n";
s << "Revision Author : " << svn.GetHeadRevisionAuthor() << "\n";
TextArea.Set(TextArea.Get() + s);
}
else
ShowError();
} // END SvnTest::Checkout()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::Connect(void)
{
// clears text area
TextArea.Clear();
// sets up a welcome message
TextArea.Set(TextArea.Get() + "Connecting to local repository '" + DestPath + "' ... please wait\n\n");
TextArea.Sync();
// error if already connected
if(svn.IsConnected())
{
ShowError("Already connected!!!");
return;
}
// connects to repository
if(svn.Connect(DestPath) == Svn::Ok)
{
StringStream s;
s << "Local path : " << svn.GetLocalPath() << "\n";
s << "Repository root : " << svn.GetRepositoryRoot() << "\n";
s << "Checked in revision : " << AsString(svn.GetCheckedRevision()) << "\n";
s << "Author : " << svn.GetCheckedRevisionAuthor() << "\n";
s << "Head revision : " << svn.GetHeadRevision() << "\n";
s << "Revision Author : " << svn.GetHeadRevisionAuthor() << "\n";
TextArea.Set(TextArea.Get() + s);
}
else
ShowError();
} // END SvnTest::Connect()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::Disconnect(void)
{
// clears text area
TextArea.Clear();
// sets up a welcome message
TextArea.Set(TextArea.Get() + "Disconnecting from local repository '" + DestPath + "' ... please wait\n\n");
TextArea.Sync();
// disconnects from repository
if(svn.Disconnect() == Svn::Ok)
TextArea.Set(TextArea.Get() + "Success.\n");
else
ShowError();
} // END SvnTest::Disconnect()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::Modify(void)
{
// changes readme file
String s = LoadFile(DestPath + "/README") + "\nA dummy change";
SaveFile(DestPath + "/README", s);
// removes dobeta file
FileDelete(DestPath + "/dobeta");
// adds an unversioned file
SaveFile(DestPath + "/UnversionedFile", s);
// adds a versioned file
SaveFile(DestPath + "/VersionedFile", s);
svn.Add(DestPath + "/VersionedFile");
} // END SvnTest::Modify()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::GetLog(void)
{
// clears text area
TextArea.Clear();
// sets up a welcome message
TextArea.Set(TextArea.Get() + "Getting log from remote repository '" + RepositoryUrl + "' repository... please wait\n\n");
TextArea.Sync();
// gets log from svn repository
TextArea.Set(TextArea.Get() + " ----- LOG OUTPUT -----\n");
Array<Svn::LogInfo>logArray;
if(svn.GetLog(logArray) == Svn::Ok)
{
StringStream s;
for(int i = 0; i< logArray.GetCount(); i++)
{
s << "Revision : " << logArray[i].revision << "\n";
s << "Author : " << logArray[i].author << "\n";
s << "Message : " << logArray[i].message << "\n";
s << "Date : " << logArray[i].date << "\n";
s << "-------------------------------------------------------------\n";
}
TextArea.Set(TextArea.Get() + s);
}
else
ShowError();
} // END SvnTest::GetLog()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::GetStatus(void)
{
// clears text area
TextArea.Clear();
// sets up a welcome message
TextArea.Set(TextArea.Get() + "Getting status from local repository '" + DestPath + "' ... please wait\n\n");
TextArea.Sync();
// gets repository status
TextArea.Set(TextArea.Get() + " ----- STATUS OUTPUT -----\n");
Array<Svn::StatusInfo>statusArray;
if(svn.GetStatus(statusArray) == Svn::Ok)
{
StringStream s;
for(int i = 0; i< statusArray.GetCount(); i++)
{
s << "Path : " << statusArray[i].path << "\n";
s << "Properties : " << statusArray[i].props << "\n";
s << "Status : " << svn.Status2String(statusArray[i].status) << "\n";
s << "Revision : " << statusArray[i].revision << "\n";
s << "Commit Revision : " << statusArray[i].commitRevision << "\n";
s << "Commit Author : " << statusArray[i].commitAuthor << "\n";
s << "Commit Date : " << statusArray[i].commitDate << "\n";
s << "-------------------------------------------------------------\n";
}
TextArea.Set(TextArea.Get() + s);
}
else
ShowError();
} // END SvnTest::GetStatus()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::ListFiles(void)
{
// clears text area
TextArea.Clear();
// sets up a welcome message
TextArea.Set(TextArea.Get() + "List of files in test folder:\n\n");
TextArea.Sync();
StringStream s;
Array<FileSystemInfo::FileInfo> files = StdFileSystemInfo().Find(DestPath + "/*");
for(int i = 0; i < files.GetCount(); i++)
s << files[i].filename << "\n";
TextArea.Set(TextArea.Get() + s);
} // END SvnTest::ListFiles()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::WipeFolder(void)
{
// clears text area
TextArea.Clear();
// sets up a welcome message
TextArea.Set(TextArea.Get() + "Wiping test folder '" + DestPath + "'.....\n\n");
TextArea.Sync();
DeleteFolderDeep(DestPath);
TextArea.Set(TextArea.Get() + "Success.\n");
} // END SvnTest::WipeFolder()
///////////////////////////////////////////////////////////////////////////////////////////////
void SvnTest::Quit(void)
{
Break();
} // END SvnTest::Quit()
///////////////////////////////////////////////////////////////////////////////////////////////
// error messagebox
void SvnTest::ShowError(void)
{
StringStream s;
s << "ERROR : " << svn.GetErrorMessage();
TextArea.Set(TextArea.Get() + s + "\n");
TextArea.Sync();
PromptOK(String(s));
} // END SvnTest::ShowError()
void SvnTest::ShowError(String const &str)
{
StringStream s;
s << "ERROR : " << str;
TextArea.Set(TextArea.Get() + s + "\n");
TextArea.Sync();
PromptOK(String(s));
} // END SvnTest::ShowError()
GUI_APP_MAIN
{
SvnTest().Run();
}