Class SVNPatchTarget
- java.lang.Object
-
- org.tmatesoft.svn.core.internal.wc.patch.SVNPatchTarget
-
public class SVNPatchTarget extends java.lang.Object
- Version:
- 1.3
-
-
Field Summary
Fields Modifier and Type Field Description private java.io.File
absPath
private boolean
added
private java.io.File
canonPathFromPatchfile
private int
currentLine
private boolean
deleted
private boolean
eof
private java.lang.String
eolStr
private java.lang.String
eolStyle
private boolean
executable
private java.io.RandomAccessFile
file
private boolean
hadRejects
private java.util.List
hunks
private java.util.Map
keywords
private SVNNodeKind
kind
private java.util.List
lines
private boolean
localMods
private static int
MAX_FUZZ
private boolean
modified
private boolean
parentDirExists
private SVNPatch
patch
private java.io.OutputStream
patched
private java.io.File
patchedPath
private java.io.OutputStream
patchedRaw
private SVNPatchFileStream
reject
private java.io.File
rejectPath
private java.io.File
relPath
private boolean
skipped
private SVNPatchFileStream
stream
-
Constructor Summary
Constructors Modifier Constructor Description private
SVNPatchTarget()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
applyHunk(SVNPatchHunkInfo hi)
Write the modified text of hunk described by HI to the patched stream of TARGET.static SVNPatchTarget
applyPatch(SVNPatch patch, java.io.File absWCPath, int stripCount, SVNAdminArea wc)
Apply a PATCH to a working copy at ABS_WC_PATH.void
copyLinesToTarget(int line)
Copy lines to the patched stream until the specified LINE has been reached.static java.lang.String[]
decomposePath(java.io.File path)
private static java.lang.String
detectFileEOL(java.io.RandomAccessFile file)
Detect the EOL marker used in file and return it.java.io.File
getAbsPath()
java.io.File
getCanonPathFromPatchfile()
private java.io.File
getChildPath(java.io.File basePath, java.io.File childPath)
int
getCurrentLine()
java.lang.String
getEolStr()
java.lang.String
getEolStyle()
java.io.RandomAccessFile
getFile()
SVNPatchHunkInfo
getHunkInfo(SVNPatchHunk hunk, int fuzz)
Determine the line at which a HUNK applies to the TARGET file, and return an appropriate hunk_info object in *HI, allocated from RESULT_POOL.java.util.List
getHunks()
java.util.Map
getKeywords()
SVNNodeKind
getKind()
java.util.List
getLines()
SVNPatch
getPatch()
java.io.OutputStream
getPatched()
java.io.File
getPatchedPath()
java.io.OutputStream
getPatchedRaw()
SVNPatchFileStream
getReject()
java.io.File
getRejectPath()
java.io.File
getRelPath()
SVNPatchFileStream
getStream()
static SVNPatchTarget
initPatchTarget(SVNPatch patch, java.io.File baseDir, int stripCount, SVNAdminArea wc)
Attempt to initialize a patch TARGET structure for a target file described by PATCH.void
installPatchedTarget(java.io.File absWCPath, boolean dryRun, SVNAdminArea wc)
Install a patched TARGET into the working copy at ABS_WC_PATH.boolean
isAdded()
static boolean
isChildPath(java.io.File baseFile, java.io.File file)
boolean
isDeleted()
boolean
isEof()
boolean
isExecutable()
boolean
isHadRejects()
boolean
isLocalMods()
boolean
isModified()
boolean
isParentDirExists()
boolean
isSkipped()
private boolean
matchHunk(SVNPatchHunk hunk, int fuzz)
Indicate in *MATCHED whether the original text of HUNK matches the patch TARGET at its current line.void
readLine(java.lang.StringBuffer line)
Read a *LINE from TARGET.void
rejectHunk(SVNPatchHunkInfo hi)
Write the diff text of the hunk described by HI to the reject stream of TARGET, and mark TARGET as having had rejects.private void
resolveTargetPath(java.io.File pathFromPatchfile, java.io.File absWCPath, int stripCount, SVNAdminArea wc)
Resolve the exact path for a patch TARGET at path PATH_FROM_PATCHFILE, which is the path of the target as it appeared in the patch file.int
scanForMatch(SVNPatchHunk hunk, boolean matchFirst, int upperLine, int fuzz)
Scan lines of TARGET for a match of the original text of HUNK, up to but not including the specified UPPER_LINE.void
seekToLine(int line)
Seek to the specified LINE in TARGET.void
sendPatchNotification(SVNAdminArea wc)
Use client context CTX to send a suitable notification for a patch TARGET.static java.io.File
stripPath(java.io.File path, int stripCount)
private void
tryWrite(java.io.OutputStream stream, java.lang.StringBuffer buffer)
Attempt to write LEN bytes of DATA to STREAM, the underlying file of which is at ABSPATH.
-
-
-
Field Detail
-
MAX_FUZZ
private static final int MAX_FUZZ
- See Also:
- Constant Field Values
-
patch
private SVNPatch patch
-
lines
private java.util.List lines
-
hunks
private java.util.List hunks
-
localMods
private boolean localMods
-
executable
private boolean executable
-
skipped
private boolean skipped
-
eolStr
private java.lang.String eolStr
-
keywords
private java.util.Map keywords
-
eolStyle
private java.lang.String eolStyle
-
kind
private SVNNodeKind kind
-
currentLine
private int currentLine
-
modified
private boolean modified
-
hadRejects
private boolean hadRejects
-
deleted
private boolean deleted
-
eof
private boolean eof
-
added
private boolean added
-
absPath
private java.io.File absPath
-
relPath
private java.io.File relPath
-
canonPathFromPatchfile
private java.io.File canonPathFromPatchfile
-
file
private java.io.RandomAccessFile file
-
stream
private SVNPatchFileStream stream
-
patchedPath
private java.io.File patchedPath
-
patchedRaw
private java.io.OutputStream patchedRaw
-
patched
private java.io.OutputStream patched
-
rejectPath
private java.io.File rejectPath
-
reject
private SVNPatchFileStream reject
-
parentDirExists
private boolean parentDirExists
-
-
Method Detail
-
isLocalMods
public boolean isLocalMods()
-
getEolStr
public java.lang.String getEolStr()
-
getKeywords
public java.util.Map getKeywords()
-
getEolStyle
public java.lang.String getEolStyle()
-
getFile
public java.io.RandomAccessFile getFile()
-
getPatchedRaw
public java.io.OutputStream getPatchedRaw()
-
getCanonPathFromPatchfile
public java.io.File getCanonPathFromPatchfile()
-
getPatch
public SVNPatch getPatch()
-
getCurrentLine
public int getCurrentLine()
-
isModified
public boolean isModified()
-
isEof
public boolean isEof()
-
getLines
public java.util.List getLines()
-
isSkipped
public boolean isSkipped()
-
getHunks
public java.util.List getHunks()
-
getKind
public SVNNodeKind getKind()
-
getStream
public SVNPatchFileStream getStream()
-
getPatched
public java.io.OutputStream getPatched()
-
getReject
public SVNPatchFileStream getReject()
-
getPatchedPath
public java.io.File getPatchedPath()
-
isAdded
public boolean isAdded()
-
isDeleted
public boolean isDeleted()
-
isExecutable
public boolean isExecutable()
-
getRejectPath
public java.io.File getRejectPath()
-
getAbsPath
public java.io.File getAbsPath()
-
getRelPath
public java.io.File getRelPath()
-
isHadRejects
public boolean isHadRejects()
-
isParentDirExists
public boolean isParentDirExists()
-
initPatchTarget
public static SVNPatchTarget initPatchTarget(SVNPatch patch, java.io.File baseDir, int stripCount, SVNAdminArea wc) throws SVNException, java.io.IOException
Attempt to initialize a patch TARGET structure for a target file described by PATCH. Use client context CTX to send notifiations and retrieve WC_CTX. STRIP_COUNT specifies the number of leading path components which should be stripped from target paths in the patch. Upon success, return the patch target structure. Else, return NULL.- Throws:
SVNException
java.io.IOException
-
detectFileEOL
private static java.lang.String detectFileEOL(java.io.RandomAccessFile file) throws java.io.IOException
Detect the EOL marker used in file and return it. If it cannot be detected, return NULL. The file is searched starting at the current file cursor position. The first EOL marker found will be returnd. So if the file has inconsistent EOL markers, this won't be detected. Upon return, the original file cursor position is always preserved, even if an error is thrown.- Throws:
java.io.IOException
-
resolveTargetPath
private void resolveTargetPath(java.io.File pathFromPatchfile, java.io.File absWCPath, int stripCount, SVNAdminArea wc) throws SVNException, java.io.IOException
Resolve the exact path for a patch TARGET at path PATH_FROM_PATCHFILE, which is the path of the target as it appeared in the patch file. Put a canonicalized version of PATH_FROM_PATCHFILE into TARGET->CANON_PATH_FROM_PATCHFILE. WC_CTX is a context for the working copy the patch is applied to. If possible, determine TARGET->WC_PATH, TARGET->ABS_PATH, TARGET->KIND, TARGET->ADDED, and TARGET->PARENT_DIR_EXISTS. Indicate in TARGET->SKIPPED whether the target should be skipped. STRIP_COUNT specifies the number of leading path components which should be stripped from target paths in the patch.- Throws:
SVNException
java.io.IOException
-
isChildPath
public static boolean isChildPath(java.io.File baseFile, java.io.File file) throws java.io.IOException
- Throws:
java.io.IOException
-
getChildPath
private java.io.File getChildPath(java.io.File basePath, java.io.File childPath) throws java.io.IOException
- Throws:
java.io.IOException
-
stripPath
public static java.io.File stripPath(java.io.File path, int stripCount)
-
rejectHunk
public void rejectHunk(SVNPatchHunkInfo hi) throws SVNException, java.io.IOException
Write the diff text of the hunk described by HI to the reject stream of TARGET, and mark TARGET as having had rejects.- Throws:
java.io.IOException
SVNException
-
applyHunk
public void applyHunk(SVNPatchHunkInfo hi) throws SVNException, java.io.IOException
Write the modified text of hunk described by HI to the patched stream of TARGET.- Throws:
SVNException
java.io.IOException
-
seekToLine
public void seekToLine(int line) throws SVNException, java.io.IOException
Seek to the specified LINE in TARGET. Mark any lines not read before in TARGET->LINES.- Throws:
SVNException
java.io.IOException
-
readLine
public void readLine(java.lang.StringBuffer line) throws SVNException, java.io.IOException
Read a *LINE from TARGET. If the line has not been read before mark the line in TARGET->LINES.- Throws:
SVNException
java.io.IOException
-
copyLinesToTarget
public void copyLinesToTarget(int line) throws SVNException, java.io.IOException
Copy lines to the patched stream until the specified LINE has been reached. Indicate in *EOF whether end-of-file was encountered while reading from the target. If LINE is zero, copy lines until end-of-file has been reached.- Throws:
java.io.IOException
SVNException
-
installPatchedTarget
public void installPatchedTarget(java.io.File absWCPath, boolean dryRun, SVNAdminArea wc) throws SVNException
Install a patched TARGET into the working copy at ABS_WC_PATH. Use client context CTX to retrieve WC_CTX, and possibly doing notifications. If DRY_RUN is TRUE, don't modify the working copy.- Throws:
SVNException
-
decomposePath
public static java.lang.String[] decomposePath(java.io.File path)
-
applyPatch
public static SVNPatchTarget applyPatch(SVNPatch patch, java.io.File absWCPath, int stripCount, SVNAdminArea wc) throws SVNException, java.io.IOException
Apply a PATCH to a working copy at ABS_WC_PATH. STRIP_COUNT specifies the number of leading path components which should be stripped from target paths in the patch.- Throws:
SVNException
java.io.IOException
-
getHunkInfo
public SVNPatchHunkInfo getHunkInfo(SVNPatchHunk hunk, int fuzz) throws SVNException, java.io.IOException
Determine the line at which a HUNK applies to the TARGET file, and return an appropriate hunk_info object in *HI, allocated from RESULT_POOL. Use fuzz factor FUZZ. Set HI->FUZZ to FUZZ. If no correct line can be determined, set HI->REJECTED to TRUE. When this function returns, neither TARGET->CURRENT_LINE nor the file offset in the target file will have changed.- Throws:
SVNException
java.io.IOException
-
scanForMatch
public int scanForMatch(SVNPatchHunk hunk, boolean matchFirst, int upperLine, int fuzz) throws SVNException, java.io.IOException
Scan lines of TARGET for a match of the original text of HUNK, up to but not including the specified UPPER_LINE. Use fuzz factor FUZZ. If UPPER_LINE is zero scan until EOF occurs when reading from TARGET. Return the line at which HUNK was matched in *MATCHED_LINE. If the hunk did not match at all, set *MATCHED_LINE to zero. If the hunk matched multiple times, and MATCH_FIRST is TRUE, return the line number at which the first match occured in *MATCHED_LINE. If the hunk matched multiple times, and MATCH_FIRST is FALSE, return the line number at which the last match occured in *MATCHED_LINE.- Throws:
SVNException
java.io.IOException
-
matchHunk
private boolean matchHunk(SVNPatchHunk hunk, int fuzz) throws SVNException, java.io.IOException
Indicate in *MATCHED whether the original text of HUNK matches the patch TARGET at its current line. Lines within FUZZ lines of the start or end of HUNK will always match. When this function returns, neither TARGET->CURRENT_LINE nor the file offset in the target file will have changed. HUNK->ORIGINAL_TEXT will be reset.- Throws:
SVNException
java.io.IOException
-
tryWrite
private void tryWrite(java.io.OutputStream stream, java.lang.StringBuffer buffer) throws java.io.IOException
Attempt to write LEN bytes of DATA to STREAM, the underlying file of which is at ABSPATH. Fail if not all bytes could be written to the stream.- Throws:
java.io.IOException
-
sendPatchNotification
public void sendPatchNotification(SVNAdminArea wc) throws SVNException
Use client context CTX to send a suitable notification for a patch TARGET.- Throws:
SVNException
-
-