Hello Stefan

Thank you for the quick and detailed response.

> > When changing the timestamp of a file to an earlier point in time and
> leaving the file size unchanged yet altering the content, Subversion is
> not always able to detect this change.
> > The attached test case is the simplest we could come up with that
> reliably reproduces the problem.
>
> Subversion uses timestamp and size as a short-cut for detecting unmodified
> files. This saves Subversion from having to run a full content comparison
> for every file in the working copy when 'svn status' is run under what
> we'd consider "normal" conditions. You are artificially creating conditions
> which fool Subversion into believing the file was not modified. Because the
> timestamps and size checks which precede a full content comparison indicate
> the file was not modified, the full content comparison is skipped and the
> modification remains undetected.
> 
> So, that's why you're seeing this behaviour. What's unclear is why you are
> investigating this behaviour in the first place. What is your use case for
> changing the file's content but leaving it's timestamp unchanged?

The reason for investigating this situation was because a tool did exactly what 
touch does in the script. A timestamp was changed to a value in the past and a 
content change went undetected.
Unfortunately the content change included a year (2015 -> 2016) and a version 
number (3.0 -> 4.0), so the file size did not change.

I see the point in Subversion using timestamps to do a quick check for changed 
files.

What puzzles me (see the script) is that the first change of the file 
(including a change of timestamp) is detected and reported by "svn status". 
However if after a commit the same procedure is repeated, Subversion does no 
longer detect the change.

So the question should be changed:

Instead of "why is the second change not reported" it should be "why is the 
first change reported".

Relevant part of the script:

  echo "2" > x
  touch -m -t "201212310000.00" x
  svn -q status  <-- this change is detected by Subversion (why?)


  svn commit -m "" x
  echo "3" > x
  touch -m -t "201212310000.00" x
  svn -q status <-- this change is not detected by Subversion (as expected)


Regards, Peter.

Reply via email to