You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesvn/src/svnqt/status.cpp

320 lines
7.8 KiB

/*
* Port for usage with qt-framework and development for tdesvn
* (C) 2005-2007 by Rajko Albrecht
* http://tdesvn.alwins-world.de
*/
/*
* ====================================================================
* Copyright (c) 2002-2005 The RapidSvn Group. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library (in the file LGPL.txt); if not,
* write to the Free Software Foundation, Inc., 51 Franklin St,
* Fifth Floor, Boston, MA 02110-1301 USA
*
* This software consists of voluntary contributions made by many
* individuals. For exact contribution history, see the revision
* history and logs, available at http://rapidsvn.tigris.org/.
* ====================================================================
*/
// svncpp
#include "status.h"
#include "svnqt/svnqt_defines.h"
#include "svnqt/path.h"
#include "svnqt/url.h"
#include "svn_path.h"
namespace svn
{
class SVNTQT_NOEXPORT Status_private
{
public:
Status_private();
virtual ~Status_private();
/**
* Initialize structures
*
* @param path
* @param status if NULL isVersioned will be false
*/
void
init (const TQString&path, const svn_wc_status2_t * status);
void
init (const TQString&path,const Status_private&src);
void
init(const TQString&url,const DirEntryPtr&src);
void
init(const TQString&url,const InfoEntry&src);
void setPath(const TQString&);
TQString m_Path;
bool m_isVersioned;
bool m_hasReal;
LockEntry m_Lock;
Entry m_entry;
svn_wc_status_kind _text_status,_prop_status,_repos_text_status,_repos_prop_status;
bool _copied,_switched;
};
Status_private::Status_private()
:m_Path(),m_isVersioned(false),m_hasReal(false)
{
}
Status_private::~ Status_private()
{
}
void Status_private::setPath(const TQString&aPath)
{
Pool pool;
if (!Url::isValid(aPath)) {
m_Path = aPath;
} else {
const char * int_path = svn_path_uri_decode(aPath.TOUTF8(), pool.pool () );
m_Path = TQString::FROMUTF8(int_path);
}
}
void Status_private::init (const TQString&path, const svn_wc_status2_t * status)
{
setPath(path);
if (!status)
{
m_isVersioned = false;
m_hasReal = false;
m_entry=Entry();
m_Lock = LockEntry();
}
else
{
m_isVersioned = status->text_status > svn_wc_status_unversioned||status->repos_text_status>svn_wc_status_unversioned;
m_hasReal = m_isVersioned &&
status->text_status!=svn_wc_status_ignored;
// now duplicate the contents
if (status->entry)
{
m_entry = Entry(status->entry);
} else {
m_entry=Entry();
}
_text_status = status->text_status;
_prop_status = status->prop_status;
_copied = status->copied!=0;
_switched = status->switched!=0;
_repos_text_status = status->repos_text_status;
_repos_prop_status = status->repos_prop_status;
if (status->repos_lock) {
m_Lock.init(status->repos_lock->creation_date,
status->repos_lock->expiration_date,
status->repos_lock->owner,
status->repos_lock->comment,
status->repos_lock->token);
} else {
m_Lock=LockEntry();
}
}
}
void
Status_private::init (const TQString&path,const Status_private&src)
{
setPath(path);
m_Lock=src.m_Lock;
m_entry=src.m_entry;
m_isVersioned=src.m_isVersioned;
m_hasReal=src.m_hasReal;
_text_status=src._text_status;
_prop_status=src._prop_status;
_repos_text_status=src._repos_text_status;
_repos_prop_status=src._repos_prop_status;
_copied=src._copied;
_switched=src._switched;
}
void Status_private::init(const TQString&url,const DirEntryPtr&src)
{
m_entry=Entry(url,src);
setPath(url);
_text_status = svn_wc_status_normal;
_prop_status = svn_wc_status_normal;
if (src) {
m_Lock=src->lockEntry();
m_isVersioned=true;
m_hasReal=true;
}
_switched = false;
_repos_text_status = svn_wc_status_normal;
_repos_prop_status = svn_wc_status_normal;
}
void Status_private::init(const TQString&url,const InfoEntry&src)
{
m_entry=Entry(url,src);
setPath(url);
m_Lock=src.lockEntry();
_text_status = svn_wc_status_normal;
_prop_status = svn_wc_status_normal;
_repos_text_status = svn_wc_status_normal;
_repos_prop_status = svn_wc_status_normal;
m_isVersioned=true;
m_hasReal=true;
}
Status::Status (const Status & src)
: m_Data(new Status_private())
{
if( &src != this )
{
if (src.m_Data) {
m_Data->init (src.m_Data->m_Path, *(src.m_Data));
} else {
m_Data->init(src.m_Data->m_Path,0);
}
}
}
Status::Status (const TQString&path, svn_wc_status2_t * status)
: m_Data(new Status_private())
{
m_Data->init(path, status);
}
Status::Status (const char*path, svn_wc_status2_t * status)
: m_Data(new Status_private())
{
m_Data->init(TQString::FROMUTF8(path),status);
}
Status::Status(const TQString&url,const DirEntryPtr&src)
: m_Data(new Status_private())
{
m_Data->init(url,src);
}
Status::Status(const TQString&url,const InfoEntry&src)
: m_Data(new Status_private())
{
m_Data->init(url,src);
}
Status::~Status ()
{
delete m_Data;
}
Status &
Status::operator=(const Status & status)
{
if (this == &status)
return *this;
if (status.m_Data) {
m_Data->init (status.m_Data->m_Path, *(status.m_Data));
} else {
m_Data->init(status.m_Data->m_Path,0);
}
return *this;
}
const LockEntry&
Status::lockEntry () const
{
return m_Data->m_Lock;
}
svn_wc_status_kind
Status::reposPropStatus () const
{
return m_Data->_repos_prop_status;
}
svn_wc_status_kind
Status::reposTextStatus () const
{
return m_Data->_repos_text_status;
}
bool
Status::isSwitched () const
{
return m_Data->_switched != 0;
}
bool
Status::isCopied () const
{
return m_Data->_copied;
}
bool
Status::isLocked () const
{
return m_Data->m_Lock.Locked();
}
bool
Status::isModified()const
{
return textStatus()==svn_wc_status_modified||propStatus()==svn_wc_status_modified
||textStatus ()==svn_wc_status_replaced;
}
bool
Status::isRealVersioned()const
{
return m_Data->m_hasReal;
}
bool
Status::isVersioned () const
{
return m_Data->m_isVersioned;
}
svn_wc_status_kind
Status::propStatus () const
{
return m_Data->_prop_status;
}
svn_wc_status_kind
Status::textStatus () const
{
return m_Data->_text_status;
}
const Entry&
Status::entry () const
{
return m_Data->m_entry;
}
const TQString&
Status::path () const
{
return m_Data->m_Path;
}
bool
Status::validReposStatus()const
{
return reposTextStatus()!=svn_wc_status_none||reposPropStatus()!=svn_wc_status_none;
}
bool
Status::validLocalStatus()const
{
return textStatus()!=svn_wc_status_none||propStatus()!=svn_wc_status_none;
}
}