summaryrefslogtreecommitdiffstats
path: root/src/svnqt/client.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/svnqt/client.hpp')
-rw-r--r--src/svnqt/client.hpp882
1 files changed, 882 insertions, 0 deletions
diff --git a/src/svnqt/client.hpp b/src/svnqt/client.hpp
new file mode 100644
index 0000000..622c0be
--- /dev/null
+++ b/src/svnqt/client.hpp
@@ -0,0 +1,882 @@
+/*
+ * Port for usage with qt-framework and development for kdesvn
+ * (C) 2005-2007 by Rajko Albrecht
+ * http://kdesvn.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/.
+ * ====================================================================
+ */
+
+#ifndef _SVNCPP_CLIENT_H_
+#define _SVNCPP_CLIENT_H_
+
+// Ignore MSVC 6 compiler warning: debug symbol truncated
+#if defined (_MSC_VER) && _MSC_VER <= 1200
+#pragma warning (disable: 4786)
+#endif
+
+// Ignore MSVC 7, 2005 & 2008 compiler warning: C++ exception specification
+#if defined (_MSC_VER) && _MSC_VER > 1200 && _MSC_VER <= 1550
+#pragma warning (disable: 4290)
+#endif
+
+#include "svnqt/svnqt_defines.hpp"
+#include "svnqt/svnqttypes.hpp"
+#include "svnqt/svnstream.hpp"
+
+// qt
+#include <qglobal.h>
+
+#if QT_VERSION < 0x040000
+ #include <qstring.h>
+ #include <qpair.h>
+ #include <qvaluelist.h>
+ #include <qmap.h>
+#else
+ #include <QtCore>
+#endif
+
+// svnqt
+#include "svnqt/context.hpp"
+#include "svnqt/exception.hpp"
+#include "svnqt/path.hpp"
+#include "svnqt/entry.hpp"
+#include "svnqt/revision.hpp"
+#include "svnqt/log_entry.hpp"
+#include "svnqt/info_entry.hpp"
+#include "svnqt/annotate_line.hpp"
+#include "svnqt/stringarray.hpp"
+#include "svnqt/diffoptions.hpp"
+#include "svnqt/conflictresult.hpp"
+
+class QStringList;
+
+namespace svn
+{
+ /** Subversion client API.
+ *
+ * Never use an object of this as global static! This will make problems with subversion
+ * initialize.
+ */
+ class SVNQT_EXPORT Client
+ {
+ public:
+
+ /**
+ * Initializes the primary memory pool.
+ */
+ Client();
+
+ virtual ~Client ();
+
+
+ /**
+ * @return returns the Client context
+ */
+ virtual const ContextP
+ getContext () const = 0;
+
+ /**
+ * sets the client context
+ * you have to make sure the old context
+ * is de-allocated
+ *
+ * @param context new context to use
+ */
+ virtual void
+ setContext (ContextP context) = 0;
+
+ /**
+ * get a real instance. Result must cleaned with delete.
+ * \param context The context to use
+ * \param subtype the wanted implementation - this moment only 0 allowed.
+ * \return an instance of client or 0L if error.
+ */
+ static Client*getobject(ContextP context,int subtype=0);
+
+ /**
+ * Enumerates all files/dirs at a given path.
+ *
+ * Throws an exception if an error occurs
+ *
+ * @param path Path to explore.
+ * @param descend Recurse into subdirectories if existant.
+ * @param get_all Return all entries, not just the interesting ones.
+ * @param update Query the repository for updates.
+ * @param no_ignore Disregard default and svn:ignore property ignores.
+ * @param hide_externals don't recurse into external definitions
+ * @param revision list specific revision when browsing remote, on working copies parameter will ignored
+ * @param detailed_remote if on remote listing detailed item info should get if possible
+ * that may slow so should configureable in frontends!
+ * @return vector with Status entries.
+ */
+ virtual StatusEntries
+ status (const Path& path,
+ Depth depth=DepthImmediates,
+ bool get_all = true,
+ bool update = false,
+ bool no_ignore = false,
+ const Revision revision = svn::Revision::HEAD,
+ bool detailed_remote = false,
+ bool hide_externals = false,
+ const StringArray & changelists=StringArray() ) throw (ClientException) = 0;
+
+ /**
+ * Returns the status of a single file in the path.
+ *
+ * Throws an exception if an error occurs
+ *
+ * @param path File to gather status.
+ * @param update if check against repository if new updates are there (for WC only)
+ * @param revision list specific revision when browsing remote, on working copies parameter will ignored
+ * @return a Status with Statis.isVersioned = FALSE
+ */
+ virtual StatusPtr
+ singleStatus (const Path& path,bool update=false,const Revision revision = svn::Revision::HEAD) throw (ClientException)=0;
+
+ /**
+ * Executes a revision checkout.
+ * @param moduleName name of the module to checkout.
+ * @param destPath destination directory for checkout.
+ * @param revision the revision number to checkout. If the number is -1
+ * then it will checkout the latest revision.
+ * @param peg Revision to look up
+ * @param recurse whether you want it to checkout files recursively.
+ * @param ignore_externals if true don't process externals definitions.
+ * @exception ClientException
+ */
+ virtual svn_revnum_t
+ checkout (const Path& moduleName, const Path & destPath,
+ const Revision & revision,
+ const Revision & peg = Revision::UNDEFINED,
+ svn::Depth depth=DepthInfinity,
+ bool ignore_externals=false,
+ bool overwrite=false
+ ) throw (ClientException) = 0;
+
+ /**
+ * relocate wc @a from to @a to
+ * @exception ClientException
+ */
+ virtual void
+ relocate (const Path & path, const QString &from_url,
+ const QString &to_url, bool recurse) throw (ClientException)=0;
+
+ /**
+ * Sets a single file for deletion.
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ remove (const Path & path, bool force,
+ bool keep_local = true,
+ const PropertiesMap&revProps = PropertiesMap()) throw (ClientException)=0;
+
+ /**
+ * Sets files for deletion.
+ *
+ * @param targets targets to delete
+ * @param force force if files are locally modified
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ remove (const Targets & targets,
+ bool force,
+ bool keep_local=true,
+ const PropertiesMap&revProps=PropertiesMap()) throw (ClientException) = 0;
+
+ /**
+ * Reverts a couple of files to a pristiner state.
+ * @exception ClientException
+ */
+ virtual void
+ revert (const Targets & targets,
+ Depth depth,
+ const StringArray&changelist=StringArray()
+ ) throw (ClientException)=0;
+
+
+ /**
+ * Adds a file to the repository.
+ * @param path the path to add
+ * @param depth if @a path is a folder add items recursive depending on value if it.
+ * @param force if true, do not error on already-versioned items.
+ * @param no_ignore if false don't add files or directories that match ignore patterns. When build against svn 1.2 always false
+ * @param add_parents if true, go up to the next versioned folder and add all between path and this folder.
+ * @exception ClientException
+ */
+ virtual void
+ add (const Path & path, svn::Depth depth,bool force=false, bool no_ignore=false, bool add_parents = true) throw (ClientException)=0;
+
+ /**
+ * Updates the file or directory.
+ * @param path targets.
+ * @param revision the revision number to checkout.
+ * Revision::HEAD will checkout the
+ * latest revision.
+ * @param depth Depthness for operation
+ * @param ignore_externals ignore externals
+ * @param allow_unversioned will operation not fail if there are unversioned items in tree with same name.
+ * @exception ClientException
+ */
+ virtual Revisions
+ update (const Targets & path, const Revision & revision,
+ Depth depth,bool ignore_externals,bool allow_unversioned,
+ bool sticky_depth) throw (ClientException) = 0;
+
+ /**
+ * Retrieves the contents for a specific @a revision of
+ * a @a path at @a peg_revision
+ *
+ * @param path path of file or directory
+ * @param peg_revision revision to base the URL
+ * @param revision revision to retrieve
+ * @return contents of the file
+ */
+ virtual QByteArray
+ cat (const Path & path,
+ const Revision & revision,
+ const Revision & peg_revision=svn_opt_revision_unspecified) throw (ClientException)=0;
+ /**
+ * Retrieves the contents for a specific @a revision of
+ * a @a path at @a peg_revision
+ *
+ * @param buffer Stream to store content direct
+ * @param path path of file or directory
+ * @param peg_revision revision to base the URL
+ * @param revision revision to retrieve
+ * @exception ClientException
+ */
+ virtual void
+ cat(svn::stream::SvnStream&buffer,
+ const Path & path,
+ const Revision & revision,
+ const Revision & peg_revision) throw (ClientException)=0;
+ /**
+ * Retrieves the contents for a specific @a revision of
+ * a @a path at @a peg_revision
+ *
+ * @param path path of file or directory
+ * @param target new (local) name
+ * @param peg_revision revision to base the URL
+ * @param revision revision to retrieve
+ * @param peg_revision Revision to look at
+ */
+ virtual void
+ get (const Path & path,
+ const QString & target,
+ const Revision & revision,
+ const Revision & peg_revision=svn_opt_revision_unspecified) throw (ClientException)=0;
+
+ /**
+ * Retrieves the contents for a specific @a revision of
+ * a @a path and stores the result in @a target
+ *
+ * @param target the container where to store the result
+ * @param path path of file or directory
+ * @param revisionStart revision to retrieve
+ * @param revisionEnd revision to retrieve
+ * @param peg indicates in which revision path is valid
+ */
+ virtual void
+ annotate (AnnotatedFile&target,
+ const Path & path,
+ const Revision & revisionStart,
+ const Revision & revisionEnd,
+ const Revision & peg = Revision::UNDEFINED,
+ const DiffOptions&diffoptions = DiffOptions(),
+ bool ignore_mimetypes = false,
+ bool include_merged_revisions = false
+ ) throw (ClientException)=0;
+
+ /**
+ * Commits changes to the repository. This usually requires
+ * authentication, see Auth.
+ * @return Returns revision transferred or svn::Revision::UNDEFINED if the revision number is invalid.
+ * @param targets files to commit.
+ * @param message log message.
+ * @param depth whether the operation should be done recursively.
+ * @param keep_locks if false unlock items in paths
+ * @param changelist
+ * @param keep_changelist
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ commit (const Targets & targets,
+ const QString& message,
+ svn::Depth depth,bool keep_locks=true,
+ const svn::StringArray&contents=svn::StringArray(),
+ const PropertiesMap&revProps=PropertiesMap(),
+ bool keep_changelist=false
+ ) throw (ClientException)=0;
+
+ /**
+ * Copies a versioned file with the history preserved.
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ copy (const Path & srcPath,
+ const Revision & srcRevision,
+ const Path & destPath) throw (ClientException)=0;
+ /**
+ * Copies a versioned file with the history preserved.
+ * @since subversion 1.5 api
+ * @see svn_client_copy4
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ copy (const Targets & srcPath,
+ const Revision & srcRevision,
+ const Revision & pegRevision,
+ const Path & destPath,
+ bool asChild=false,bool makeParent=false,const PropertiesMap&revProps=PropertiesMap()) throw (ClientException)=0;
+
+ /**
+ * Moves or renames a file.
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ move (const Path & srcPath,
+ const Path & destPath,
+ bool force) throw (ClientException)=0;
+ /**
+ * Moves or renames a file.
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ move (const Targets & srcPath,
+ const Path & destPath,
+ bool force,bool asChild,bool makeParent,const PropertiesMap&revProps=PropertiesMap()) throw (ClientException)=0;
+
+ /**
+ * Creates a directory directly in a repository or creates a
+ * directory on disk and schedules it for addition. If <i>path</i>
+ * is a URL then authentication is usually required, see Auth and
+ * the callback asks for a logmessage. With subversion 1.4 the target
+ * must not exist (\sa svn_client_move4)
+ *
+ * @param path
+ * @param message log message. if it is QString::null asks when working on repository
+ * @param makeParent create parent folders if not existant (only when build with svn 1.5 or above)
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ mkdir (const Path & path,
+ const QString& message,
+ bool makeParent=true,
+ const PropertiesMap&revProps=PropertiesMap()
+ ) throw (ClientException)=0;
+ /**
+ * Creates a directory directly in a repository or creates a
+ * directory on disk and schedules it for addition. If <i>path</i>
+ * is a URL then authentication is usually required, see Auth and
+ * the callback asks for a logmessage.
+ *
+ * @param targets encoded pathes to create
+ * @param message log message. if it is QString::null asks when working on repository
+ * @param makeParent create parent folders if not existant (only when build with svn 1.5 or above)
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ mkdir (const Targets & targets,
+ const QString& message,
+ bool makeParent=true,
+ const PropertiesMap&revProps=PropertiesMap()
+ ) throw (ClientException)=0;
+
+ /**
+ * Recursively cleans up a local directory, finishing any
+ * incomplete operations, removing lockfiles, etc.
+ * @param path a local directory.
+ * @exception ClientException
+ */
+ virtual void
+ cleanup (const Path & path) throw (ClientException)=0;
+
+ /**
+ * Removes the 'conflicted' state on a file.
+ * @exception ClientException
+ */
+ virtual void resolve (const Path & path,Depth depth,const ConflictResult&resolution=ConflictResult()) throw (ClientException)=0;
+
+ /**
+ * Exports the contents of either a subversion repository into a
+ * 'clean' directory (meaning a directory with no administrative
+ * directories).
+ * @exception ClientException
+ * @param srcPath source path
+ * @param destPath a destination path that must not already exist.
+ * @param revision revision to use for the export
+ * @param peg the revision where the path is first looked up when exporting from a repository.
+ * @param overwrite overwrite existing files
+ * @param native_eol Either "LF", "CR" or "CRLF" or NULL.
+ * @param ignore_externals don't process externals definitions as part of this operation.
+ * @param recurse if true, export recursively.<br>
+ Otherwise, export just the directory represented by from and its immediate non-directory children.
+ */
+ virtual svn_revnum_t
+ doExport (const Path & srcPath,
+ const Path & destPath,
+ const Revision & revision,
+ const Revision & peg = Revision::UNDEFINED,
+ bool overwrite=false,
+ const QString&native_eol=QString::null,
+ bool ignore_externals = false,
+ svn::Depth depth=svn::DepthInfinity
+ ) throw (ClientException)=0;
+
+ /**
+ * Update local copy to mirror a new url. This excapsulates the
+ * svn_client_switch() client method.
+ * @exception ClientException
+ */
+ virtual svn_revnum_t
+ doSwitch (
+ const Path & path, const QString& url,
+ const Revision & revision,
+ Depth depth,
+ const Revision & peg=Revision::UNDEFINED,
+ bool sticky_depth = true,
+ bool ignore_externals=false,
+ bool allow_unversioned=false
+ ) throw (ClientException)=0;
+
+ /**
+ * Import file or directory PATH into repository directory URL at
+ * head. This usually requires authentication, see Auth.
+ * @param path path to import
+ * @param url
+ * @param message log message.
+ * @param depth kind of recurse operation
+ * @param no_ignore if false, don't add items matching global ignore pattern (@since subversion 1.3)
+ * @param no_unknown_nodetype if true ignore files type not known like pipes or device files (@since subversion 1.5)
+ * @exception ClientException
+ */
+ virtual svn::Revision
+ import (const Path & path, const QString& url,
+ const QString& message,
+ svn::Depth depth,
+ bool no_ignore,bool no_unknown_nodetype,
+ const PropertiesMap&revProps=PropertiesMap()) throw (ClientException)=0;
+
+ /**
+ * Merge changes from two paths into a new local path.
+ * @exception ClientException
+ */
+ virtual void
+ merge (const Path & path1, const Revision & revision1,
+ const Path & path2, const Revision & revision2,
+ const Path & localPath, bool force,
+ Depth depth,
+ bool notice_ancestry=false,
+ bool dry_run=false,
+ bool record_only=false,
+ const StringArray&merge_options=StringArray()
+ ) throw (ClientException)=0;
+
+ virtual void
+ merge_peg(const Path&src,
+ const RevisionRanges&ranges,
+ const Revision&peg,
+ const Path&targetWc,
+ Depth depth,
+ bool notice_ancestry=false,
+ bool dry_run=false,
+ bool force=false,
+ bool record_only=false,
+ const StringArray&merge_options=StringArray()
+ ) throw (ClientException)=0;
+
+ virtual void
+ merge_peg(const Path&src,
+ const RevisionRange&range,
+ const Revision&peg,
+ const Path&targetWc,
+ Depth depth,
+ bool notice_ancestry=false,
+ bool dry_run=false,
+ bool force=false,
+ const StringArray&merge_options=StringArray()
+ ) throw (ClientException)=0;
+
+ /**
+ * Retrieve information for the given path
+ * remote or local.
+ *
+ * @param path path for info
+ * @param rec recursive (if dir)
+ * @param rev for which revision
+ * @param peg_revision peg revision
+ * @return InfoEntries
+ */
+ virtual InfoEntries
+ info (const Path &path,
+ Depth depth,
+ const Revision & rev,
+ const Revision & peg_revision=svn_opt_revision_unspecified,
+ const StringArray&changelists=StringArray()
+ ) throw (ClientException)=0;
+
+ /**
+ * Retrieve log information for the given path
+ * Loads the log messages result set. The first
+ * entry is the youngest revision.
+ *
+ * You can use the constants Revision::START and
+ * Revision::HEAD
+ *
+ * @param path
+ * @param revisionStart
+ * @param revisionEnd
+ * @param discoverChangedPaths
+ * @param strictNodeHistory
+ * @param limit the maximum log entries count.
+ * @return a vector with log entries
+ */
+ virtual LogEntriesPtr
+ log (const Path& path,
+ const Revision & revisionStart,
+ const Revision & revisionEnd,
+ const Revision & revisionPeg,
+ bool discoverChangedPaths=false,
+ bool strictNodeHistory=true,int limit = 0,
+ bool include_merged_revisions = false,
+ const StringArray&revprops=StringArray()
+ ) throw (ClientException)=0;
+
+ /**
+ * Retrieve log information for the given path
+ * Loads the log messages result set. Result will stored
+ * in a map where the key is the revision number
+ *
+ * You can use the constants Revision::START and
+ * Revision::HEAD
+ *
+ * @param path Path to make a log for
+ * @param revisionStart
+ * @param revisionEnd
+ * @param target the logmap where to store the entries
+ * @param discoverChangedPaths
+ * @param strictNodeHistory
+ * @param limit (ignored when subversion 1.1 API)
+ * @return true if success
+ */
+ virtual bool
+ log (const Path& path, const Revision & revisionStart,
+ const Revision & revisionEnd,
+ LogEntriesMap&target,
+ const Revision & revisionPeg=Revision::UNDEFINED,
+ bool discoverChangedPaths=false,
+ bool strictNodeHistory=true,int limit = 0,
+ bool include_merged_revisions = false,
+ const StringArray&revprops=StringArray()
+ ) throw (ClientException)=0;
+
+ /**
+ * Produce diff output which describes the delta between
+ * @a path/@a revision1 and @a path/@a revision2. @a path
+ * can be either a working-copy path or a URL.
+ *
+ * A ClientException will be thrown if either @a revision1 or
+ * @a revision2 has an `unspecified' or unrecognized `kind'.
+ *
+ * @param tmpPath prefix for a temporary directory needed by diff.
+ * Filenames will have ".tmp" and similar added to this prefix in
+ * order to ensure uniqueness.
+ * @param path path of the file.
+ * @param revision1 one of the revisions to check.
+ * @param revision2 the other revision.
+ * @param recurse whether the operation should be done recursively.
+ * @param ignoreAncestry whether the files will be checked for
+ * relatedness.
+ * @param noDiffDeleted if true, no diff output will be generated on deleted files.
+ * @param ignore_contenttype if true generate diff even the items are marked as binaries
+ * @param extra extra options for diff ("-b", "-w","--ignore-eol-style")
+ * @return delta between the files
+ * @exception ClientException
+ */
+ virtual QByteArray
+ diff_peg(const Path & tmpPath, const Path & path,const Path&relativeTo,
+ const Revision & revision1, const Revision & revision2, const Revision& peg_revision,
+ Depth depth, bool ignoreAncestry,
+ bool noDiffDeleted,bool ignore_contenttype,
+ const StringArray&extra,
+ const StringArray&changelists
+ ) throw (ClientException)=0;
+
+ /**
+ * Same as other diff but extra options always set to empty list.
+ */
+ virtual QByteArray
+ diff_peg (const Path & tmpPath, const Path & path,const Path&relativeTo,
+ const Revision & revision1, const Revision & revision2, const Revision& peg_revision,
+ Depth depth, bool ignoreAncestry,
+ bool noDiffDeleted,bool ignore_contenttype) throw (ClientException)=0;
+
+ /**
+ * Produce diff output which describes the delta between
+ * @a path1/@a revision1 and @a path2/@a revision2. @a path2
+ * can be either a working-copy path or a URL.
+ *
+ * A ClientException will be thrown if either @a revision1 or
+ * @a revision2 has an `unspecified' or unrecognized `kind'.
+ *
+ * @param tmpPath prefix for a temporary directory needed by diff.
+ * Filenames will have ".tmp" and similar added to this prefix in
+ * order to ensure uniqueness.
+ * @param path1 first file or folder to diff.
+ * @param path2 second file or folder to diff.
+ * @param revision1 one of the revisions to check (path1).
+ * @param revision2 the other revision (path2).
+ * @param recurse whether the operation should be done recursively.
+ * @param ignoreAncestry whether the files will be checked for
+ * relatedness.
+ * @param noDiffDeleted if true, no diff output will be generated on deleted files.
+ * @param ignore_contenttype if true generate diff even the items are marked as binaries
+ * @param extra extra options for diff ("-b", "-w","--ignore-eol-style")
+ * @return delta between the files
+ * @exception ClientException
+ */
+ virtual QByteArray
+ diff (const Path & tmpPath, const Path & path1,const Path & path2,const Path&relativeTo,
+ const Revision & revision1, const Revision & revision2,
+ Depth depth, bool ignoreAncestry,
+ bool noDiffDeleted,bool ignore_contenttype,
+ const StringArray&extra,
+ const StringArray&changelists
+ ) throw (ClientException)=0;
+
+ /**
+ * Same as other diff but extra options and changelists always set to empty list.
+ */
+ virtual QByteArray
+ diff (const Path & tmpPath, const Path & path1,const Path & path2,const Path&relativeTo,
+ const Revision & revision1, const Revision & revision2,
+ Depth depth, bool ignoreAncestry,
+ bool noDiffDeleted,bool ignore_contenttype) throw (ClientException)=0;
+
+ /**
+ * lists entries in @a pathOrUrl no matter whether local or
+ * repository
+ *
+ * If checking for locks is activated, it lists the locks inside repository, not locks inside
+ * working copy!
+ * @param pathOrUrl
+ * @param revision
+ * @param peg at wich revision path exists
+ * @param depth @sa depth
+ * @param retrieve_locks check for REPOSITORY locks while listing.
+ * @return a vector of directory entries, each with
+ * a relative path (only filename). In subversion >= 1.4 an entry without a name is returned, too. This
+ * is the searched directory (done in subversion itself)
+ */
+ virtual DirEntries
+ list (const Path& pathOrUrl,
+ const Revision& revision,
+ const Revision& peg,
+ svn::Depth depth,bool retrieve_locks) throw (ClientException)=0;
+
+ /**
+ * lists properties in @a path no matter whether local or
+ * repository
+ *
+ * @param path
+ * @param revision
+ * @param peg most case should set to @a revision
+ * @param recurse
+ * @return PropertiesList
+ */
+ virtual PathPropertiesMapListPtr
+ proplist(const Path &path,
+ const Revision &revision,
+ const Revision &peg,
+ Depth depth=DepthEmpty,
+ const StringArray&changelists=StringArray()
+ )=0;
+
+ /**
+ * lists one property in @a path no matter whether local or
+ * repository
+ *
+ * @param propName
+ * @param path
+ * @param revision
+ * @param peg most case should set to @a revision
+ * @param recurse
+ * @return PathPropertiesMapList and revision where the properties are taken from (svn 1.5) or undefined revision (prior 1.5)
+ */
+ virtual QPair<QLONG,PathPropertiesMapList>
+ propget(const QString& propName,
+ const Path &path,
+ const Revision &revision,
+ const Revision &peg,
+ Depth depth = svn::DepthEmpty,
+ const StringArray&changelists=StringArray()) = 0;
+
+ /**
+ * set property in @a path no matter whether local or
+ * repository
+ *
+ * @param path
+ * @param revision
+ * @param propName
+ * @param propValue
+ * @param recurse
+ * @param skip_checks if true skip validity checks
+ * @return PropertiesList
+ */
+ virtual void
+ propset(const QString& propName,
+ const QString& propValue,
+ const Path &path,
+ Depth depth=DepthEmpty,
+ bool skip_checks=false,
+ const Revision&base_revision=Revision::UNDEFINED,
+ const StringArray&changelists=StringArray(),
+ const PropertiesMap&revProps=PropertiesMap()
+ ) = 0;
+
+ /**
+ * delete property in @a path no matter whether local or
+ * repository
+ *
+ * @param propName
+ * @param path
+ * @param revision
+ * @param recurse
+ */
+ virtual void
+ propdel(const QString& propName,
+ const Path &path,
+ Depth depth=DepthEmpty,
+ bool skip_check=false,
+ const Revision&base_revision=Revision::UNDEFINED,
+ const StringArray&changelists=StringArray())=0;
+
+
+ /**
+ * lists revision properties in @a path no matter whether local or
+ * repository
+ *
+ * @param path
+ * @param revision
+ * @return PropertiesList
+ */
+ virtual QPair<QLONG,PropertiesMap>
+ revproplist(const Path &path,
+ const Revision &revision)=0;
+
+ /**
+ * lists one revision property in @a path no matter whether local or
+ * repository
+ *
+ * @param propName
+ * @param path
+ * @param revision
+ * @return PropertiesList
+ */
+ virtual QPair<QLONG,QString>
+ revpropget(const QString& propName,
+ const Path &path,
+ const Revision &revision)=0;
+
+ /**
+ * set revision property in @a path no matter whether local or
+ * repository
+ *
+ * @param propName
+ * @param propValue
+ * @param path
+ * @param revision
+ * @param force
+ * @return Revision
+ */
+ virtual QLONG
+ revpropset(const QString& propName,
+ const QString& propValue,
+ const Path &path,
+ const Revision &revision,
+ bool force=false)=0;
+
+ /**
+ * delete revision property in @a path no matter whether local or
+ * repository
+ *
+ * @param propName
+ * @param path
+ * @param revision
+ * @param force
+ * @return Revision
+ */
+ virtual QLONG
+ revpropdel(const QString& propName,
+ const Path &path,
+ const Revision &revision,
+ bool force=false) = 0;
+
+ /**
+ * lock files in repository or working copy
+ * @param targets items to be locked
+ * @param message if non null stored with each lock in repository
+ * @param steal_lock if true locks in wc will stolen.
+ * @since subversion 1.2
+ */
+ virtual void
+ lock (const Targets & targets,
+ const QString& message,
+ bool steal_lock) throw (ClientException)=0;
+ /**
+ * unlock files in repository or working copy
+ * @param targets items to unlock
+ * @param break_lock ignore any errors
+ */
+ virtual void
+ unlock (const Targets&targets,
+ bool break_lock) throw (ClientException)=0;
+
+ virtual void
+ url2Revision(const QString&revstring,
+ Revision&start,Revision&end)=0;
+ virtual void
+ url2Revision(const QString&revstring,
+ Revision&start)=0;
+
+ private:
+ /**
+ * disallow assignment operator
+ */
+ Client & operator= (const Client &);
+ /**
+ * disallow copy constructor
+ */
+ Client (const Client &);
+ };
+
+}
+
+#endif
+/* -----------------------------------------------------------------
+ * local variables:
+ * eval: (load-file "../../rapidsvn-dev.el")
+ * end:
+ */