/* ====================================================================
* Copyright (c) 2003-2006, Martin Hauner
* http://subcommander.tigris.org
*
* Subcommander is licensed as described in the file doc/COPYING, which
* you should have received as part of this distribution.
* ====================================================================
*/
// sc
#include "WcStatus.h"
#include "WcEntry.h"
#include "Lock.h"
namespace svn
{
WcStatus::WcStatus( const sc::String& name, svn_wc_status2_t* status )
: _name(name), _entry(0), _lockStatus(WcStatusLock_None), _reposLock(0)
{
if( status->entry )
{
_entry = new WcEntry( status->entry );
}
_textStatus = (WcStatusKind)status->text_status;
_propStatus = (WcStatusKind)status->prop_status;
_reposTextStatus = (WcStatusKind)status->repos_text_status;
_reposPropStatus = (WcStatusKind)status->repos_prop_status;
_locked = 1 == status->locked;
_copied = 1 == status->copied;
_switched = 1 == status->switched;
if( status->repos_lock )
{
_reposLock = new Lock( status->repos_lock );
}
}
WcStatus::WcStatus( const WcStatus& src )
: _entry(0), _reposLock(0)
{
_name = src._name;
if( src._entry )
{
_entry = new WcEntry( *(src._entry) );
}
_textStatus = src._textStatus;
_propStatus = src._propStatus;
_reposTextStatus = src._reposTextStatus;
_reposPropStatus = src._reposPropStatus;
_locked = src._locked;
_copied = src._copied;
_switched = src._switched;
if( src._reposLock )
{
_reposLock = new Lock( *(src._reposLock) );
}
}
WcStatus::~WcStatus()
{
delete _entry;
delete _reposLock;
}
void WcStatus::calcLockStatus( bool repos )
{
if( repos )
{
if( _reposLock )
{
if( _entry && ! _entry->getLockToken().isEmpty() )
{
if( _reposLock->getToken() == _entry->getLockToken() )
{
_lockStatus = WcStatusLock_Locked;
}
else
{
_lockStatus = WcStatusLock_Stolen;
}
}
else
{
_lockStatus = WcStatusLock_Other;
}
}
else if( _entry && ! _entry->getLockToken().isEmpty() )
{
_lockStatus = WcStatusLock_Broken;
}
else
{
_lockStatus = WcStatusLock_None;
}
}
else
{
if( _entry && ! _entry->getLockToken().isEmpty() )
{
_lockStatus = WcStatusLock_Locked;
}
else
{
_lockStatus = WcStatusLock_None;
}
}
}
const sc::String& WcStatus::getName() const
{
return _name;
}
const WcEntry* WcStatus::getWcEntry() const
{
return _entry;
}
WcStatusKind WcStatus::getTextStatus() const
{
return _textStatus;
}
WcStatusKind WcStatus::getPropStatus() const
{
return _propStatus;
}
bool WcStatus::isLocked() const
{
return _locked;
}
bool WcStatus::isCopied() const
{
return _copied;
}
bool WcStatus::isSwitched() const
{
return _switched;
}
WcStatusKind WcStatus::getReposTextStatus() const
{
return _reposTextStatus;
}
WcStatusKind WcStatus::getReposPropStatus() const
{
return _reposPropStatus;
}
WcStatusLockKind WcStatus::getLockStatus() const
{
return _lockStatus;
}
const Lock* WcStatus::getReposLock() const
{
return _reposLock;
}
/**
* \return true if text or property is changed otherwise false.
*/
bool WcStatus::isChanged() const
{
return
(_textStatus != WcStatus_Normal && _textStatus != WcStatus_None) ||
(_propStatus != WcStatus_Normal && _propStatus != WcStatus_None);
}
bool WcStatus::isReposChanged() const
{
return
(_reposTextStatus != WcStatus_Normal && _reposTextStatus != WcStatus_None) ||
(_reposPropStatus != WcStatus_Normal && _reposPropStatus != WcStatus_None);
}
/**
* \return true if text/property wc or repos is changed or if any of the locked
* copied or switched flags is set. Otherwise false.
*/
bool WcStatus::isChangedOrFlaged() const
{
return isChanged() || isReposChanged() || _locked || _switched || _copied
|| _lockStatus != WcStatusLock_None;
}
bool WcStatus::isAddable() const
{
return _textStatus == svn::WcStatus_Unversioned;
}
bool WcStatus::isRevertable() const
{
return
(_textStatus != svn::WcStatus_Normal && _textStatus != svn::WcStatus_Unversioned ) ||
(_propStatus != svn::WcStatus_Normal && _propStatus != svn::WcStatus_None );
}
bool WcStatus::isRemoveable() const
{
return true;
}
bool WcStatus::isConflicted() const
{
return _textStatus == svn::WcStatus_Conflicted;
}
bool WcStatus::isPropConflicted() const
{
return _propStatus == svn::WcStatus_Conflicted;
}
bool WcStatus::isVersioned() const
{
return _textStatus != svn::WcStatus_Unversioned;
}
bool WcStatus::isDir() const
{
if( ! _entry )
{
return false;
}
return _entry->isDir();
}
} // namespace
syntax highlighted by Code2HTML, v. 0.9.1