Interface ISVNRemote
- All Known Implementing Classes:
RemoteSession
public interface ISVNRemote
- Since:
- 1.9
- See Also:
- svn_ra.h,
the documentation of the
svn_ra_open
function.
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static class
ISVNRemote.Capability
Enumeration of known capabilities of the repository and server.static class
ISVNRemote.FileRevision
static class
ISVNRemote.LocationSegment
-
Method Summary
Modifier and Type Method Description void
cancelOperation()
Cancel the active operation, including any ongoing edits.void
changeRevisionProperty(long revision, String propertyName, byte[] oldValue, byte[] newValue)
Change the value of an unversioned property.NodeKind
checkPath(String path, long revision)
Return the kind of the node inpath
atrevision
.void
dispose()
Release the native peer (should not depend on finalize).ISVNEditor
getCommitEditor(Map<String,byte[]> revisionProperties, CommitCallback commitCallback, Set<Lock> lockTokens, boolean keepLocks)
Like {@link #getCommitEditor(Map,CommitCallbacknull. ISVNEditor
getCommitEditor(Map<String,byte[]> revisionProperties, CommitCallback commitCallback, Set<Lock> lockTokens, boolean keepLocks, ISVNEditor.ProvideBaseCallback getBase, ISVNEditor.ProvidePropsCallback getProps, ISVNEditor.GetNodeKindCallback getCopyfromKind)
Return an editor for committing changes to the session's repository, setting the revision properties fromrevisionProperties
.long
getDirectory(long revision, String path, int direntFields, Map<String,DirEntry> dirents, Map<String,byte[]> properties)
Fetch the contents and properties of directorypath
atrevision
.long
getFile(long revision, String path, OutputStream contents, Map<String,byte[]> properties)
Fetch the contents and properties of filepath
atrevision
.List<ISVNRemote.FileRevision>
getFileRevisions(String path, long startRevision, long endRevision, boolean includeMergedRevisions)
Retrieve a subset of the interesting revisions of a filepath
as seen in revisionendRevision
.void
getFileRevisions(String path, long startRevision, long endRevision, boolean includeMergedRevisions, RemoteFileRevisionsCallback handler)
Callhandler
for each of a subset of the interesting revisions of a filepath
as seen in revisionendRevision
.long
getLatestRevision()
Get the latest revision number from the session's repository.Map<Long,String>
getLocations(String path, long pegRevision, Iterable<Long> locationRevisions)
Find the locations of the object identified bypath
andpegRevision
in the repository at the given revisions.List<ISVNRemote.LocationSegment>
getLocationSegments(String path, long pegRevision, long startRevision, long endRevision)
Return a list of segments in the location history ofpath
atpegRevision
, working backwards in time fromstartRevision
toendRevision
.void
getLocationSegments(String path, long pegRevision, long startRevision, long endRevision, RemoteLocationSegmentsCallback handler)
Callhandler
for every segment in the location history ofpath
atpegRevision
, working backwards in time fromstartRevision
toendRevision
.Map<String,Lock>
getLocks(String path, Depth depth)
Return a dictionary containing all locks on or below the given path.void
getLog(Iterable<String> paths, long startRevision, long endRevision, int limit, boolean strictNodeHistory, boolean discoverPath, boolean includeMergedRevisions, Iterable<String> revisionProperties, LogMessageCallback callback)
Invokecallback
for each log message fromstartRevision
toendRevision
.Map<String,Mergeinfo>
getMergeinfo(Iterable<String> paths, long revision, Mergeinfo.Inheritance inherit, boolean includeDescendants)
Retrieve the merginfo forpaths
, whose elements are relative to the session's URL.String
getReposRelativePath(String url)
Return a path relative to the repository root URL associated with current session URL.String
getReposRootUrl()
Get the root URL of the session's repository.String
getReposUUID()
Get the UUID of the session's repository.long
getRevisionByDate(Date date)
Get the latest revision number at the given time from the session's repository.long
getRevisionByTimestamp(long timestamp)
Get the latest revision number at the given time, expressed as the number of microseconds since the epoch, from the session's repository.Map<String,byte[]>
getRevisionProperties(long revision)
Return the set of unversioned properties set onrevision
in the session's repository.byte[]
getRevisionProperty(long revision, String propertyName)
Return the value of unversioned propertypropertyName
inrevision
in the session's repository.String
getSessionRelativePath(String url)
Return a path relative to the current session URL.String
getSessionUrl()
Get the current session URL.boolean
hasCapability(ISVNRemote.Capability capability)
Check if the server associated with this session has the givencapability
.void
reparent(String url)
Change the URL of the session to point to a new path in the same repository.DirEntry
stat(String path, long revision)
Return the directory entry object forpath
atrevision
.ISVNReporter
status(String statusTarget, long revision, Depth depth, RemoteStatus receiver)
Ask for a description of the status of a working copy with respect torevision
of the session's repository, or the HEAD revision ifrevision
isRevision.SVN_INVALID_REVNUM
.
-
Method Details
-
dispose
void dispose()Release the native peer (should not depend on finalize). Also invalidates any existing editors related to this session. -
cancelOperation
Cancel the active operation, including any ongoing edits.- Throws:
ClientException
-
reparent
Change the URL of the session to point to a new path in the same repository.Note: The operation fails if the URL has a different repository root than the current session URL.
- Throws:
ClientException
-
getSessionUrl
Get the current session URL.- Throws:
ClientException
-
getSessionRelativePath
Return a path relative to the current session URL.- Parameters:
url
- Must be a child of the current session URL.- Throws:
ClientException
-
getReposRelativePath
Return a path relative to the repository root URL associated with current session URL.- Parameters:
url
- Must be a child of the repository root URL.- Throws:
ClientException
-
getReposUUID
Get the UUID of the session's repository.- Throws:
ClientException
-
getReposRootUrl
Get the root URL of the session's repository.- Throws:
ClientException
-
getLatestRevision
Get the latest revision number from the session's repository.- Throws:
ClientException
-
getRevisionByDate
Get the latest revision number at the given time from the session's repository.- Throws:
ClientException
-
getRevisionByTimestamp
Get the latest revision number at the given time, expressed as the number of microseconds since the epoch, from the session's repository.- Throws:
ClientException
-
changeRevisionProperty
void changeRevisionProperty(long revision, String propertyName, byte[] oldValue, byte[] newValue) throws ClientExceptionChange the value of an unversioned property.Note: If the server has Capability.atomic_revprops and
oldValue
is notnull
, and the present value of the propery is notoldValue
(e.g., if another client changed the property), then the operation will fail.Note: If the server does not adveritse Capability.atomic_revprops, then
oldValue
must benull
.- Parameters:
revision
- The revision to which the propery is attachedpropertyName
- The name of the properyoldValue
- The previous value of the property (see note below)newValue
- The new value of the property. IfnewValue
isnull
, the property will be deleted.- Throws:
IllegalArgumentException
- ifoldValue
is notnull
and the server does not advertise the atomic_revprops capability.ClientException
-
getRevisionProperties
Return the set of unversioned properties set onrevision
in the session's repository.- Throws:
ClientException
-
getRevisionProperty
Return the value of unversioned propertypropertyName
inrevision
in the session's repository. Returnsnull
if the property does not exist.- Throws:
ClientException
-
getCommitEditor
ISVNEditor getCommitEditor(Map<String,byte[]> revisionProperties, CommitCallback commitCallback, Set<Lock> lockTokens, boolean keepLocks, ISVNEditor.ProvideBaseCallback getBase, ISVNEditor.ProvidePropsCallback getProps, ISVNEditor.GetNodeKindCallback getCopyfromKind) throws ClientExceptionReturn an editor for committing changes to the session's repository, setting the revision properties fromrevisionProperties
. The revisions being committed against are passed to the editor functions. The root of the commit is the session's URL.revisionProperties
is a hash mapping property names to property values. The commit log message is expected to be in theProperty.REV_LOG
element.revisionProperties
can not contain either ofProperty.REV_DATE
orProperty.REV_AUTHOR
.Before
ISVNEditor.complete()
returns, but after the commit has succeeded, it will invokecommitCallback
(if notnull
) with filled-inCommitInfo
. IfcommitCallback
returns an error, that error will be returned fromISVNEditor.complete()
, otherwiseISVNEditor.complete()
will return successfully (unless it encountered an error before invokingcommitCallback
). The callback will not be called if the commit was a no-op (i.e., nothing was committed).lockTokens
, if notnull
, is a hash mapping paths (relative to the session's URL) to lock tokens. The server checks that the correct token is provided for each committed, locked path.lockTokens
must live during the whole commit operation.If
keepLocks is true, then do not release locks on committed objects. Else, automatically release such locks. The callbacks
getBase
,getProps
andgetCopyfromKind
are invoked by the editor to fetch the contents, preoprties and copyfrom kind of an entry during the commit drive. They may benull
; in that case, the commit may be less efficient because the client will not be able to delta-compress the data sent to the server, and more server connections may have to be opened.The caller may not perform any remote operations using this session before finishing the edit.
- Throws:
ClientException
-
getCommitEditor
ISVNEditor getCommitEditor(Map<String,byte[]> revisionProperties, CommitCallback commitCallback, Set<Lock> lockTokens, boolean keepLocks) throws ClientExceptionLike {@link #getCommitEditor(Map,CommitCallbacknull. - Throws:
ClientException
-
getFile
long getFile(long revision, String path, OutputStream contents, Map<String,byte[]> properties) throws ClientExceptionFetch the contents and properties of filepath
atrevision
.revision
may beRevision.SVN_INVALID_REVNUM
indicating that the HEAD revision should be used.path
is interpreted relative to the session's URL.If
revision
isRevision.SVN_INVALID_REVNUM
. returns the actual revision that was retrieved; otherwise returnsrevision
.If
contents
is notnull
, push the contents of the file into the stream.If
properties
is notnull
, setproperties
to contain the properties of the file. This means all properties: not just ones controlled by the user and stored in the repository, but immutable ones generated by the SCM system itself (e.g. 'wcprops', 'entryprops', etc.). Any existing contents of theproperties
map will be discarded by callingMap.clear()
, if the map implementation supports that operation.The implementations of
contents
andproperties
may not perform any ISVNRemote operations using this session.- Returns:
- The revision of the file that was retrieved.
- Throws:
ClientException
-
getDirectory
long getDirectory(long revision, String path, int direntFields, Map<String,DirEntry> dirents, Map<String,byte[]> properties) throws ClientExceptionFetch the contents and properties of directorypath
atrevision
.revision
may beRevision.SVN_INVALID_REVNUM
, indicating that the HEAD revision should be used.path
is interpreted relative to the session's URL.If
dirents
is notnull
, it will contain all the entries of the directory; the keys will be the entry basenames. Any existing contente of thedirents
collection will be discarded by callingMap.clear()
, if the collection implementation supports that operation.direntFields
controls which portions of the DirEntry objects are filled in. To have them completely filled in, just pass DirEntry.Fields.all, othewise pass a bitwise OR of any of the DirEntry.Fields flags you would like to have.If
properties
is notnull
, setproperties
to contain the properties of the directory. This means all properties: not just ones controlled by the user and stored in the repository, but immutable ones generated by the SCM system itself (e.g. 'wcprops', 'entryprops', etc.). Any existing contents of theproperties
map will be discarded by callingMap.clear()
, if the map implementation supports that operation.The implementations of
dirents
andproperties
may not perform any ISVNRemote operations using this session.- Returns:
- The revision of the directory that was retrieved.
- Throws:
ClientException
-
getMergeinfo
Map<String,Mergeinfo> getMergeinfo(Iterable<String> paths, long revision, Mergeinfo.Inheritance inherit, boolean includeDescendants) throws ClientExceptionRetrieve the merginfo forpaths
, whose elements are relative to the session's URL. The request will fail if any one ofpaths
does not exist in the givenrevision
.Note: If the server doesn't support retrieval of mergeinfo (which can happen even for file:// URLs, if the repository itself hasn't been upgraded), an unsupported feature exception is thrown in preference to any other error that might otherwise be returned.
- Parameters:
revision
- The revision to look forpaths
in. Defaults to the youngest revision whenRevision.SVN_INVALID_REVNUM
.inherit
- Indicates whether explicit, explicit or inherited, or only inherited mergeinfo forpaths
is retrieved.includeDescendants
- Whentrue
, additionally return the mergeinfo for any descendant of any element ofpaths
which has the mergeinfo explicitly set on it. (Note that inheritance is only taken into account for the elements inpaths
; descendants of the elements inpaths
which get their mergeinfo via inheritance are not included.)- Returns:
- A dictionary of
Mergeinfo
objects for the givenpaths
, ornull
if no mergeinfo is available.. - Throws:
ClientException
-
status
ISVNReporter status(String statusTarget, long revision, Depth depth, RemoteStatus receiver) throws ClientExceptionAsk for a description of the status of a working copy with respect torevision
of the session's repository, or the HEAD revision ifrevision
isRevision.SVN_INVALID_REVNUM
.The client begins by providing a
receiver
to the remote session; this object must contain knowledge of where the change will begin in the working copy.In return, the client receives an
ISVNReporter
instance, which it uses to describe its working copy by making calls to its methods.When finished, the client calls
ISVNReporter.finishReport()
. This results inreceiver
being called once for every path in the working copy that is different from the repository.statusTarget
is an optional single path component that restricts the scope of the status report to an entry in the directory represented by the session's URL, or empty if the entire directory is meant to be examined.Get status as deeply as
depth
indicates. Ifdepth
isDepth.unknown
, get the status down to the ambient depth of the working copy. Ifdepth
is deeper than the working copy, include changes that would be needed to populate the working copy to that depth.The caller may not perform any operations using this session before finishing the report, and may not perform any operations using this session from within the implementation of
receiver
.Note: The reporter provided by this function does not supply copy-from information to the editor methods.
Note: In order to prevent pre-1.5 servers from doing more work than needed, and sending too much data back, a pre-1.5 'recurse' directive may be sent to the server, based on
depth
.- Throws:
ClientException
-
getLog
void getLog(Iterable<String> paths, long startRevision, long endRevision, int limit, boolean strictNodeHistory, boolean discoverPath, boolean includeMergedRevisions, Iterable<String> revisionProperties, LogMessageCallback callback) throws ClientExceptionInvokecallback
for each log message fromstartRevision
toendRevision
.startRevision
may be greater or less thanendRevision
; this just controls whether the log messages are processed in descending or ascending revision number order.If
startRevision
orendRevision
isRevision.SVN_INVALID_REVNUM
, the HEAD revision is uses for that argument. If eiter is an invaild non-existent revision, an error will be returned.If
paths
is notnull
and has one or more elements, then only show revisions in which at least one ofpaths
was changed (i.e., if file, text or props changed; if dir, props changed or an entry was added or deleted).If
limit
is non-zero only invoke @a receiver on the first code>limit logs.If
discoverPath
is set, then each call tocallback
contains the list of changed paths in that revision.If
strictNodeHistory
is set, copy history will not be traversed (if any exists) when harvesting the revision logs for each path.If
includeMergedRevisions
is set, log information for revisions which have been merged to @a targets will also be returned.If
revisionProperties
isnull
, retrieve all revision properties; otherwise, retrieve only the revision properties contained in the set (i.e. retrieve none if the set is empty).The implementation of
callback
may not perform any operations using this session. If the invocation ofcallback
throws an exception, the operation will stop.Note: If
paths
isnull
or empty, the result depends on the server. Pre-1.5 servers will send nothing; 1.5 servers will effectively perform the log operation on the root of the repository. This behavior may be changed in the future to ensure consistency across all pedigrees of server.Note: Pre-1.5 servers do not support custom revprop retrieval;
revisionProperties
isnull
or contains a revprop other than svn:author, svn:date, or svn:log, an not-implemented error is returned.- Throws:
ClientException
-
checkPath
Return the kind of the node inpath
atrevision
.- Parameters:
path
- A path relative to the sessionn URL- Throws:
ClientException
-
stat
Return the directory entry object forpath
atrevision
.- Parameters:
path
- A path relative to the sessionn URL- Returns:
- A directory entry obeject, or
null
ifpath
atrevision
does not exist. - Throws:
ClientException
-
getLocations
Map<Long,String> getLocations(String path, long pegRevision, Iterable<Long> locationRevisions) throws ClientExceptionFind the locations of the object identified bypath
andpegRevision
in the repository at the given revisions. If the object does not exist in a given revision, that revision will be ignored.Note: None of the parameters may be NULL.
- Parameters:
path
- A path relative to the session URLpegRevision
- The peg revision to use for locating the objectlocationRevisions
- The set of revisions to find locations for- Throws:
ClientException
-
getLocationSegments
void getLocationSegments(String path, long pegRevision, long startRevision, long endRevision, RemoteLocationSegmentsCallback handler) throws ClientExceptionCallhandler
for every segment in the location history ofpath
atpegRevision
, working backwards in time fromstartRevision
toendRevision
.- Parameters:
path
- A session-relative path.pegRevision
- The peg revision to findpath
in.startRevision
- The upper bound of the revision range. UseRevision.SVN_INVALID_REVNUM
to indicate HEAD.endRevision
- The lower bound of the revision range. UseRevision.SVN_INVALID_REVNUM
to trace the history of the object to its origin.handler
- The callback handler.- Throws:
ClientException
-
getLocationSegments
List<ISVNRemote.LocationSegment> getLocationSegments(String path, long pegRevision, long startRevision, long endRevision) throws ClientExceptionReturn a list of segments in the location history ofpath
atpegRevision
, working backwards in time fromstartRevision
toendRevision
.- Parameters:
path
- A session-relative path.pegRevision
- The peg revision to findpath
in.startRevision
- The upper bound of the revision range. UseRevision.SVN_INVALID_REVNUM
to indicate HEAD.endRevision
- The lower bound of the revision range. UseRevision.SVN_INVALID_REVNUM
to trace the history of the object to its origin.- Throws:
ClientException
-
getFileRevisions
void getFileRevisions(String path, long startRevision, long endRevision, boolean includeMergedRevisions, RemoteFileRevisionsCallback handler) throws ClientExceptionCallhandler
for each of a subset of the interesting revisions of a filepath
as seen in revisionendRevision
.If there is an interesting revision of the file that is less than or equal to
startRevision
, the iteration will begin at that revision. Otherwise the iteration will begin at the first revision of the file in the repository, which has to be less than or equal toendRevision
. Note that if the function succeeds,handler
will be called at least once.Note: This functionality is not available in pre-1.1 servers. If the server doesn't implement it, an alternative (but much slower) implementation based on
getLog(java.lang.Iterable<java.lang.String>, long, long, int, boolean, boolean, boolean, java.lang.Iterable<java.lang.String>, org.apache.subversion.javahl.callback.LogMessageCallback)
is used.Note: With Subversion 1.8 and newer servers this function supports reversion of the revision range for when
includeMergedRevisions
isfalse
.- Parameters:
path
- A path relative to the session URL.startRevision
- The lower bound of the revision interval.endRevision
- the upper bound of the revision interval.includeMergedRevisions
- Whentrue
, revisions that contributed to a merge are included in the result.- Throws:
ClientException
-
getFileRevisions
List<ISVNRemote.FileRevision> getFileRevisions(String path, long startRevision, long endRevision, boolean includeMergedRevisions) throws ClientExceptionRetrieve a subset of the interesting revisions of a filepath
as seen in revisionendRevision
.If there is an interesting revision of the file that is less than or equal to
startRevision
, the iteration will begin at that revision. Otherwise the iteration will begin at the first revision of the file in the repository, which has to be less than or equal toendRevision
. Note that if the function succeeds, the returned list will contain at least one element.Note: This functionality is not available in pre-1.1 servers. If the server doesn't implement it, an alternative (but much slower) implementation based on
getLog(java.lang.Iterable<java.lang.String>, long, long, int, boolean, boolean, boolean, java.lang.Iterable<java.lang.String>, org.apache.subversion.javahl.callback.LogMessageCallback)
is used.Note: With Subversion 1.8 and newer servers this function supports reversion of the revision range for when
includeMergedRevisions
isfalse
.- Parameters:
path
- A path relative to the session URL.startRevision
- The lower bound of the revision interval.endRevision
- the upper bound of the revision interval.includeMergedRevisions
- Whentrue
, revisions that contributed to a merge are included in the result.- Throws:
ClientException
-
getLocks
Return a dictionary containing all locks on or below the given path.Note: It is not considered an error if
path
does not exist in HEAD. Such a search will simply return no locks.Note:This functionality is not available in pre-1.2 servers.
- Parameters:
path
- A path relative to the sessionn URLdepth
- The recursion depth- Throws:
ClientException
-
hasCapability
Check if the server associated with this session has the givencapability
.- Throws:
ClientException
-