Class SVNPatchTarget

java.lang.Object
org.tmatesoft.svn.core.internal.wc.patch.SVNPatchTarget

public class SVNPatchTarget extends Object
Version:
1.3
  • Field Details

    • MAX_FUZZ

      private static final int MAX_FUZZ
      See Also:
    • patch

      private SVNPatch patch
    • lines

      private List lines
    • hunks

      private List hunks
    • localMods

      private boolean localMods
    • executable

      private boolean executable
    • skipped

      private boolean skipped
    • eolStr

      private String eolStr
    • keywords

      private Map keywords
    • eolStyle

      private 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 File absPath
    • relPath

      private File relPath
    • canonPathFromPatchfile

      private File canonPathFromPatchfile
    • file

      private RandomAccessFile file
    • stream

      private SVNPatchFileStream stream
    • patchedPath

      private File patchedPath
    • patchedRaw

      private OutputStream patchedRaw
    • patched

      private OutputStream patched
    • rejectPath

      private File rejectPath
    • reject

      private SVNPatchFileStream reject
    • parentDirExists

      private boolean parentDirExists
  • Constructor Details

    • SVNPatchTarget

      private SVNPatchTarget()
  • Method Details

    • isLocalMods

      public boolean isLocalMods()
    • getEolStr

      public String getEolStr()
    • getKeywords

      public Map getKeywords()
    • getEolStyle

      public String getEolStyle()
    • getFile

      public RandomAccessFile getFile()
    • getPatchedRaw

      public OutputStream getPatchedRaw()
    • getCanonPathFromPatchfile

      public File getCanonPathFromPatchfile()
    • getPatch

      public SVNPatch getPatch()
    • getCurrentLine

      public int getCurrentLine()
    • isModified

      public boolean isModified()
    • isEof

      public boolean isEof()
    • getLines

      public List getLines()
    • isSkipped

      public boolean isSkipped()
    • getHunks

      public List getHunks()
    • getKind

      public SVNNodeKind getKind()
    • getStream

      public SVNPatchFileStream getStream()
    • getPatched

      public OutputStream getPatched()
    • getReject

      public SVNPatchFileStream getReject()
    • getPatchedPath

      public File getPatchedPath()
    • isAdded

      public boolean isAdded()
    • isDeleted

      public boolean isDeleted()
    • isExecutable

      public boolean isExecutable()
    • getRejectPath

      public File getRejectPath()
    • getAbsPath

      public File getAbsPath()
    • getRelPath

      public File getRelPath()
    • isHadRejects

      public boolean isHadRejects()
    • isParentDirExists

      public boolean isParentDirExists()
    • initPatchTarget

      public static SVNPatchTarget initPatchTarget(SVNPatch patch, File baseDir, int stripCount, SVNAdminArea wc) throws SVNException, 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
      IOException
    • detectFileEOL

      private static String detectFileEOL(RandomAccessFile file) throws 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:
      IOException
    • resolveTargetPath

      private void resolveTargetPath(File pathFromPatchfile, File absWCPath, int stripCount, SVNAdminArea wc) throws SVNException, 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
      IOException
    • isChildPath

      public static boolean isChildPath(File baseFile, File file) throws IOException
      Throws:
      IOException
    • getChildPath

      private File getChildPath(File basePath, File childPath) throws IOException
      Throws:
      IOException
    • stripPath

      public static File stripPath(File path, int stripCount)
    • rejectHunk

      public void rejectHunk(SVNPatchHunkInfo hi) throws SVNException, 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:
      IOException
      SVNException
    • applyHunk

      public void applyHunk(SVNPatchHunkInfo hi) throws SVNException, IOException
      Write the modified text of hunk described by HI to the patched stream of TARGET.
      Throws:
      SVNException
      IOException
    • seekToLine

      public void seekToLine(int line) throws SVNException, IOException
      Seek to the specified LINE in TARGET. Mark any lines not read before in TARGET->LINES.
      Throws:
      SVNException
      IOException
    • readLine

      public void readLine(StringBuffer line) throws SVNException, IOException
      Read a *LINE from TARGET. If the line has not been read before mark the line in TARGET->LINES.
      Throws:
      SVNException
      IOException
    • copyLinesToTarget

      public void copyLinesToTarget(int line) throws SVNException, 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:
      IOException
      SVNException
    • installPatchedTarget

      public void installPatchedTarget(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 String[] decomposePath(File path)
    • applyPatch

      public static SVNPatchTarget applyPatch(SVNPatch patch, File absWCPath, int stripCount, SVNAdminArea wc) throws SVNException, 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
      IOException
    • getHunkInfo

      public SVNPatchHunkInfo getHunkInfo(SVNPatchHunk hunk, int fuzz) throws SVNException, 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
      IOException
    • scanForMatch

      public int scanForMatch(SVNPatchHunk hunk, boolean matchFirst, int upperLine, int fuzz) throws SVNException, 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
      IOException
    • matchHunk

      private boolean matchHunk(SVNPatchHunk hunk, int fuzz) throws SVNException, 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
      IOException
    • tryWrite

      private void tryWrite(OutputStream stream, StringBuffer buffer) throws 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:
      IOException
    • sendPatchNotification

      public void sendPatchNotification(SVNAdminArea wc) throws SVNException
      Use client context CTX to send a suitable notification for a patch TARGET.
      Throws:
      SVNException