Mercurial > jhg
diff src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java @ 120:b19f0ac5ee62
Check against working copy shall expect non-persistent modifications done by filters and not report such files as modified
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 04 Feb 2011 03:23:47 +0100 |
parents | 6c0be854d149 |
children | 4a948ec83980 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java Fri Feb 04 03:09:15 2011 +0100 +++ b/src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java Fri Feb 04 03:23:47 2011 +0100 @@ -16,11 +16,11 @@ */ package org.tmatesoft.hg.repo; +import static java.lang.Math.max; import static java.lang.Math.min; import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; import static org.tmatesoft.hg.repo.HgRepository.TIP; -import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -32,7 +32,6 @@ import org.tmatesoft.hg.core.Nodeid; import org.tmatesoft.hg.core.Path; -import org.tmatesoft.hg.internal.ByteArrayChannel; import org.tmatesoft.hg.internal.FilterByteChannel; import org.tmatesoft.hg.repo.HgStatusCollector.ManifestRevisionInspector; import org.tmatesoft.hg.util.ByteChannel; @@ -175,8 +174,11 @@ if (f.lastModified() / 1000 == r.time && r.size == f.length()) { inspector.clean(getPathPool().path(fname)); } else { - // FIXME check actual content to avoid false modified files - inspector.modified(getPathPool().path(fname)); + // check actual content to avoid false modified files + HgDataFile df = repo.getFileNode(fname); + if (!areTheSame(f, df.content(), df.getPath())) { + inspector.modified(df.getPath()); + } } } else if ((r = getDirstate().checkAdded(fname)) != null) { if (r.name2 == null) { @@ -259,9 +261,19 @@ final boolean[] checkValue = new boolean[] { true }; ByteChannel check = new ByteChannel() { int x = 0; + final boolean debug = false; // XXX may want to add global variable to allow clients to turn public int write(ByteBuffer buffer) throws Exception { for (int i = buffer.remaining(); i > 0; i--, x++) { if (data[x] != buffer.get()) { + if (debug) { + byte[] xx = new byte[15]; + if (buffer.position() > 5) { + buffer.position(buffer.position() - 5); + } + buffer.get(xx); + System.out.print("expected >>" + new String(data, max(0, x - 4), 20) + "<< but got >>"); + System.out.println(new String(xx) + "<<"); + } checkValue[0] = false; break; }