public void textDeltaEnd(String path) throws SVNException { if (myCurrentFile.skipThis) { return; } myCurrentFile.newTextBaseMD5Digest = myDeltaProcessor.textDeltaEnd(); if (myCurrentFile.newTextBaseSHA1ChecksumStream != null) { myCurrentFile.newTextBaseSHA1Checksum = new SvnChecksum(SvnChecksum.Kind.sha1, myCurrentFile.newTextBaseSHA1ChecksumStream.getDigest()); } if (myCurrentFile.expectedSourceChecksum != null && myCurrentFile.expectedSourceChecksum.getKind() == SvnChecksum.Kind.md5) { String actualSourceChecksum = myCurrentFile.sourceChecksumStream != null ? myCurrentFile.sourceChecksumStream.getDigest() : null; if (!myCurrentFile.expectedSourceChecksum.getDigest().equals(actualSourceChecksum)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_CORRUPT_TEXT_BASE, "Checksum mismatch while updating ''{0}''; expected: ''{1}'', actual: ''{2}''", new Object[] { myCurrentFile.localAbsolutePath, myCurrentFile.expectedSourceChecksum.getDigest(), actualSourceChecksum }); SVNErrorManager.error(err, SVNLogType.WC); } } if (myCurrentFile.newTextBaseTmpAbsPath != null && myCurrentFile.newTextBaseSHA1Checksum != null && myCurrentFile.newTextBaseMD5Digest != null) { myWCContext.getDb().installPristine(myCurrentFile.newTextBaseTmpAbsPath, myCurrentFile.newTextBaseSHA1Checksum, new SvnChecksum(SvnChecksum.Kind.md5, myCurrentFile.newTextBaseMD5Digest)); } if (myCurrentFile.originalChecksum != null && myCurrentFile.newTextBaseSHA1Checksum != null && myCurrentFile.originalChecksum.equals(myCurrentFile.newTextBaseSHA1Checksum)) { myCurrentFile.newTextBaseSHA1Checksum = null; } }
public void textDeltaEnd(String path) throws SVNException { if (currentFile.deltaProcessor != null) { String checksum = currentFile.deltaProcessor.textDeltaEnd(); currentFile.resultMd5Checksum = SvnChecksum.fromString("$md5 $" + checksum); } }
public void applyTextDelta(String path, String baseChecksumDigest) throws SVNException { InputStream source = SVNFileUtil.DUMMY_IN; if (originalChecksum != null) { if (baseChecksumDigest != null) { SvnChecksum expectedChecksum = new SvnChecksum(SvnChecksum.Kind.md5, baseChecksumDigest); SvnChecksum originalMd5; if (originalChecksum.getKind() != SvnChecksum.Kind.md5) { originalMd5 = context.getDb().getPristineMD5(wriAbsPath, originalChecksum); } else { originalMd5 = originalChecksum; } if (!expectedChecksum.equals(originalMd5)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CHECKSUM_MISMATCH, "Base checksum mismatch for ''{0}'':\n" + " expected: ''{1}''\n" + " actual: ''{2}''\n", localAbsPath, expectedChecksum, originalMd5); SVNErrorManager.error(err, SVNLogType.WC); } } source = context.getDb().readPristine(wriAbsPath, originalChecksum); } currentBase = context.openWritableBase(wriAbsPath, true, true); deltaProcessor.applyTextDelta(source, currentBase.stream, true); }
public void removePristine(File wcRootAbsPath, SvnChecksum checksum) throws SVNException { assert (isAbsolute(wcRootAbsPath)); assert (checksum != null); if (checksum.getKind() != SvnChecksum.Kind.sha1) { //i.e. checksum has kind "md5" checksum = getPristineSHA1(wcRootAbsPath, checksum); } assert (checksum.getKind() == SvnChecksum.Kind.sha1); DirParsedInfo parseDir = parseDir(wcRootAbsPath, Mode.ReadWrite); SVNWCDbDir pdh = parseDir.wcDbDir; verifyDirUsable(pdh); SvnWcDbPristines.removePristine(pdh.getWCRoot(), checksum); }
public static SvnChecksum getPristineSHA1(SVNWCDbRoot root, SvnChecksum md5Checksum) throws SVNException { SVNSqlJetStatement stmt = root.getSDb().getStatement(SVNWCDbStatements.SELECT_PRISTINE_SHA1_CHECKSUM); try { stmt.bindChecksum(1, md5Checksum); boolean have_row = stmt.next(); if (!have_row) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_DB_ERROR, "The pristine text with MD5 checksum ''{0}'' not found", md5Checksum.toString()); SVNErrorManager.error(err, SVNLogType.WC); return null; } SvnChecksum sha1_checksum = getColumnChecksum(stmt, PRISTINE__Fields.checksum); assert (sha1_checksum.getKind() == SvnChecksum.Kind.sha1); return sha1_checksum; } finally { stmt.reset(); } }
SvnChecksum entryMd5Checksum = new SvnChecksum(Kind.md5, entry.getChecksum()); SvnChecksum foundMd5Checksum = null; if (textBaseInfo != null && textBaseInfo.revertBase != null && textBaseInfo.revertBase.md5Checksum != null) { if (entryMd5Checksum.getDigest() != null && foundMd5Checksum != null && !entryMd5Checksum.equals(foundMd5Checksum)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_CORRUPT, "Bad base MD5 checksum for ''{0}''; expected: ''{1}''; found ''{2}'';",
/** * Creates checksum object from <code>String</code>. * * @param checksum checksum represented in <code>String</code> */ public static SvnChecksum fromString(String checksum) throws SVNException { if (checksum == null || checksum.length() < 7) { return null; } Kind kind = checksum.charAt(1) == 'm' ? Kind.md5: Kind.sha1; String digest = checksum.substring(6); return new SvnChecksum(kind, digest); }
expectedMd5Checksum = new SvnChecksum(SvnChecksum.Kind.md5, expectedMd5Digest); !expectedMd5Checksum.getDigest().equals(fb.newTextBaseMD5Digest)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CHECKSUM_MISMATCH, "Checksum mismatch for ''{0}''; expected: ''{1}'', actual: ''{2}''", new Object[] { fb.localAbsolutePath, expectedMd5Checksum, fb.newTextBaseMD5Digest
public void applyTextDelta(String path, String baseChecksum) throws SVNException { if (currentEntry.skip) { return; } InputStream sourceStream; if (baseChecksum != null && currentEntry.baseChecksum != null) { SvnChecksum baseMd5 = db.getPristineMD5(anchorAbspath, currentEntry.baseChecksum); if (baseMd5 != null && !baseMd5.getDigest().equals(baseChecksum)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CHECKSUM_MISMATCH, "Checksum mismatch for ''{0}''", currentEntry.localAbspath); SVNErrorManager.error(err, SVNLogType.WC); } sourceStream = db.readPristine(currentEntry.localAbspath, currentEntry.baseChecksum); } else if (currentEntry.baseChecksum != null) { sourceStream = db.readPristine(currentEntry.localAbspath, currentEntry.baseChecksum); } else { sourceStream = SVNFileUtil.DUMMY_IN; } currentEntry.tempFile = createTempFile(db.getWCRootTempDir(currentEntry.localAbspath)); deltaProcessor.applyTextDelta(sourceStream, currentEntry.tempFile, true); }
SvnChecksum expected = SvnChecksum.fromString("$md5 $" + textChecksum); if (expected != null && b.resultMd5Checksum != null && !expected.equals(b.resultMd5Checksum)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CHECKSUM_MISMATCH, "Checksum mismatch for ''{0}''", b.repoPath); SVNErrorManager.error(err, SVNLogType.WC);
SvnChecksum oldchecksum = SvnChecksum.fromString(checksum.toString()); if (getPath) { info.path = db.getPristinePath(localAbspath, oldchecksum);
if (SvnChecksum.match(srcChecksum, dstChecksum)) { srcChecksum = null;
public void bindChecksum(int i, SvnChecksum checksum) { adjustBinds(i); binds.set(i - 1, checksum != null ? checksum.toString() : null); }
db.removePristine(localAbspath, baseSha1Checksum); if (workingSha1Checksum != null && !workingSha1Checksum.equals(baseSha1Checksum)) { db.removePristine(localAbspath, workingSha1Checksum);
public static boolean match(SvnChecksum checksum1, SvnChecksum checksum2) { if (checksum1 == null || checksum2 == null) { return true; } if (checksum1.getKind() != checksum2.getKind()) { return false; } switch (checksum1.getKind()) { case md5: case sha1: return checksum1.getDigest().equals(checksum2.getDigest()); default: return false; } } }
SvnChecksum expectedMd5Checksum = new SvnChecksum(SvnChecksum.Kind.md5, expectedMd5Digest); SvnChecksum actualMd5Checksum = newMd5Checksum; if (actualMd5Checksum == null) { actualMd5Checksum = originalChecksum; if (actualMd5Checksum != null && actualMd5Checksum.getKind() != SvnChecksum.Kind.md5) { actualMd5Checksum = context.getDb().getPristineMD5(wriAbsPath, actualMd5Checksum); if (!expectedMd5Checksum.equals(actualMd5Checksum)) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CHECKSUM_MISMATCH, "Checksum mismatch for ''{0}'':\n" +
public boolean checkPristine(File wcRootAbsPath, SvnChecksum checksum) throws SVNException { assert (SVNFileUtil.isAbsolute(wcRootAbsPath)); assert (checksum != null); if (checksum.getKind() != SvnChecksum.Kind.sha1) { //i.e. checksum has kind "md5" checksum = getPristineSHA1(wcRootAbsPath, checksum); } assert (checksum.getKind() == SvnChecksum.Kind.sha1); DirParsedInfo parseDir = parseDir(wcRootAbsPath, Mode.ReadWrite); SVNWCDbDir pdh = parseDir.wcDbDir; verifyDirUsable(pdh); return SvnWcDbPristines.checkPristine(pdh.getWCRoot(), checksum); }
public SvnChecksum getPristineMD5(File wcRootAbsPath, SvnChecksum sha1Checksum) throws SVNException { assert (isAbsolute(wcRootAbsPath)); assert (sha1Checksum != null); assert (sha1Checksum.getKind() == SvnChecksum.Kind.sha1); final DirParsedInfo parsed = parseDir(wcRootAbsPath, Mode.ReadOnly); final SVNWCDbDir pdh = parsed.wcDbDir; verifyDirUsable(pdh); final SVNSqlJetStatement stmt = pdh.getWCRoot().getSDb().getStatement(SVNWCDbStatements.SELECT_PRISTINE_MD5_CHECKSUM); try { stmt.bindChecksum(1, sha1Checksum); boolean have_row = stmt.next(); if (!have_row) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_DB_ERROR, "The pristine text with checksum ''{0}'' not found", sha1Checksum.toString()); SVNErrorManager.error(err, SVNLogType.WC); return null; } final SvnChecksum md5Checksum = getColumnChecksum(stmt, PRISTINE__Fields.md5_checksum); assert (md5Checksum.getKind() == SvnChecksum.Kind.md5); return md5Checksum; } finally { stmt.reset(); } }