Patching Timestamps (Comparing and Merging Files) (original) (raw)
10.5 Updating Timestamps on Patched Files ¶
When patch
updates a file, it normally sets the file’s last-modified timestamp to the current time of day. If you are usingpatch
to track a software distribution, this can causemake
to incorrectly conclude that a patched file is out of date. For example, if syntax.c depends on syntax.y, andpatch
updates syntax.c and then syntax.y, thensyntax.c will normally appear to be out of date with respect tosyntax.y even though its contents are actually up to date.
The --set-utc (-Z) option causes patch
to set a patched file’s modification and access times to the timestamps given in context diff headers. If the context diff headers do not specify a time zone, they are assumed to use Coordinated Universal Time (UTC, often known as GMT).
The --set-time (-T) option acts like -Z or--set-utc, except that it assumes that the context diff headers’ timestamps use local time instead of UTC. This option is not recommended, because patches using local time cannot easily be used by people in other time zones, and because local timestamps are ambiguous when local clocks move backwards during daylight-saving time adjustments. If the context diff headers specify a time zone, this option is equivalent to --set-utc (-Z).
patch
normally refrains from setting a file’s timestamps if the file’s original last-modified timestamp does not match the time given in the diff header, of if the file’s contents do not exactly match the patch. However, if the --force (-f) option is given, the file’s timestamps are set regardless.
Due to the limitations of the current diff
format,patch
cannot update the times of files whose contents have not changed. Also, if you set file timestamps to values other than the current time of day, you should also remove (e.g., with ‘make clean’) all files that depend on the patched files, so that later invocations of make
do not get confused by the patched files’ times.