[Unison-hackers] PATCH: Bugfix unison -times support for directories

Robert Hardy rhardy at teledyne.com
Fri Mar 20 13:11:46 EDT 2009


Sorry it took so long to reply. It seems you are right, while this does work
for the initial replication, if a file changes the parent's directory's
modtime will be changed to the wrong time. Any idea how we can fix the
-times option properly?

# mkdir -p test1/test2 test1/test3

# cp -a /tmp/49c2fbf3855bd /tmp/7XEMQU.tmp /tmp/jar_cache27933.tmp /tmp/test1/test2
# ls -l /tmp/test1/test2
total 20
-rw------- 1 rhardy rhardy 12057 Mar 19 22:14 49c2fbf3855bd
-rw------- 1 rhardy rhardy  1711 Mar 16 10:12 7XEMQU.tmp
-rw-r--r-- 1 rhardy rhardy  1047 Mar 15 13:33 jar_cache27933.tmp
test2/ test3/

# cp -a /tmp/49c2fbf3855bd /tmp/7XEMQU.tmp /tmp/jar_cache27933.tmp /tmp/test1/test3
# ls -la /tmp/test1/test3
total 20
drwxr-xr-x 2 root   root     152 Mar 20 12:50 ./
drwxr-xr-x 4 root   root      96 Mar 20 12:49 ../
-rw------- 1 rhardy rhardy 12057 Mar 19 22:14 49c2fbf3855bd
-rw------- 1 rhardy rhardy  1711 Mar 16 10:12 7XEMQU.tmp
-rw-r--r-- 1 rhardy rhardy  1047 Mar 15 13:33 jar_cache27933.tmp
# touch /tmp/test1/test3
vortex:/tmp/test1 12:51 {0}# ls -la /tmp/test1
total 1
drwxr-xr-x  4 root root   96 Mar 20 12:49 ./
drwxrwxrwt 17 root root 1344 Mar 20 12:51 ../
drwxr-xr-x  2 root root  152 Mar 20 12:50 test2/
drwxr-xr-x  2 root root  152 Mar 20 12:51 test3/
vortex:/tmp 12:51 {0}# ls -la
total 342
drwxrwxrwt 17 root   root     1344 Mar 20 12:51 ./
drwxr-xr-x 25 root   root      680 Mar  2 18:37 ../
-rw-------  1 rhardy rhardy  12057 Mar 19 22:14 49c2fbf3855bd
-rw-------  1 rhardy rhardy  12057 Mar 19 22:14 49c2fbf39ec83
-rw-------  1 rhardy rhardy  12057 Mar 19 22:14 49c2fbfa288a3
-rw-------  1 rhardy rhardy   1711 Mar 16 10:12 7XEMQU.tmp
drwxr-xr-x  2 rhardy rhardy     48 Mar 19 23:45 acroread_500_500/
-rw-r--r--  1 root   root    32227 Mar 11 23:44 alsa-info.txt
drwxrwxrwt  2 root   root       72 Mar  1 12:41 .font-unix/
drwx------  3 rhardy rhardy     72 Mar 20 12:45 gconfd-rhardy/
srw-rw-rw-  1 root   root        0 Mar  2 09:40 .gdm_socket=
-rw-------  1 rhardy rhardy    117 Mar 20 12:45 .gdmYEH1QU
drwxr-xr-x  2 rhardy rhardy     48 Mar 20 00:01 hsperfdata_rhardy/
drwxr-xr-x  2 root   root       48 Mar 15 13:29 hsperfdata_root/
drwxrwxrwt  2 root   root      112 Mar 20 12:45 .ICE-unix/
-rw-r--r--  1 rhardy rhardy      0 Mar 15 13:32 jar_cache27926.tmp
-rw-r--r--  1 rhardy rhardy   1054 Mar 15 13:32 jar_cache27927.tmp
-rw-r--r--  1 rhardy rhardy      0 Mar 15 13:32 jar_cache27929.tmp
-rw-r--r--  1 rhardy rhardy   1054 Mar 15 13:32 jar_cache27930.tmp
-rw-r--r--  1 rhardy rhardy      0 Mar 15 13:33 jar_cache27932.tmp
-rw-r--r--  1 rhardy rhardy   1047 Mar 15 13:33 jar_cache27933.tmp
-rw-r--r--  1 rhardy rhardy      0 Mar 15 13:33 jar_cache27935.tmp
-rw-r--r--  1 rhardy rhardy   1054 Mar 15 13:33 jar_cache27936.tmp
-rw-r--r--  1 rhardy rhardy  65598 Mar 15 13:33 jar_cache27937.tmp
-rw-r--r--  1 rhardy rhardy      0 Mar 15 13:33 jar_cache27938.tmp
-rw-r--r--  1 rhardy rhardy   1046 Mar 15 13:33 jar_cache27939.tmp
-rw-r--r--  1 rhardy rhardy 167887 Mar 15 13:33 jar_cache27940.tmp
-rw-r--r--  1 rhardy rhardy      0 Mar 15 13:33 jar_cache27941.tmp
-rw-r--r--  1 rhardy rhardy   1054 Mar 15 13:33 jar_cache27942.tmp
drwx------  2 rhardy rhardy     72 Mar 20 12:51 kde-rhardy/
drwx------  3 rhardy rhardy    592 Mar 20 12:45 ksocket-rhardy/
-rw-r-----  1 rhardy rhardy      6 Mar 11 21:24 .ktorrent_500.lock
drwx------  2 root   root       48 Feb 12 01:55 lost+found/
drwx------  2 rhardy rhardy    360 Mar 20 12:45 orbit-rhardy/
drwx------  2 rhardy rhardy     80 Mar 20 12:45 ssh-ICvvB13260/
drwxr-xr-x  4 root   root       96 Mar 20 12:49 test1/
-r--r--r--  1 root   root       11 Mar 20 00:03 .X0-lock
drwxrwxrwt  2 root   root       72 Mar 20 00:03 .X11-unix/

vortex:/tmp 12:53 {0}# unison -owner -group -times test1 dest
Contacting server...
Connected [//vortex//tmp/dest -> //vortex//tmp/test1]
Looking for changes

Press return to continue.[<spc>]    scanning test2/7XEMQU.tmp
Reconciling changes

test1          dest
props    ====> props      /  [] .
dir      ---->            test2  [f] .
dir      ---->            test3  [f] .

Proceed with propagating updates? [] y
Propagating updates

UNISON 2.27.57 started propagating changes at 12:54:40 on 20 Mar 2009
[BGN] Copying properties for  from /tmp/test1 to /tmp/dest
[END] Copying properties for
[BGN] Copying test2 from /tmp/test1 to /tmp/dest
[END] Copying test2
[BGN] Copying test3 from /tmp/test1 to /tmp/dest
[END] Copying test3
UNISON 2.27.57 finished propagating changes at 12:54:40 on 20 Mar 2009

Saving synchronizer state
Synchronization complete  (3 items transferred, 0 skipped, 0 failures)
vortex:/tmp 12:54 {0}# ls -l
total 329
drwxr-xr-x 4 root   root       96 Mar 20 12:54 dest/
drwxr-xr-x 4 root   root       96 Mar 20 12:49 test1/
vortex:/tmp 12:54 {0}# ls -l dest/
total 0
drwxr-xr-x 2 root root 152 Mar 20 12:50 test2/
drwxr-xr-x 2 root root 152 Mar 20 12:51 test3/

49c2fbf3855bd  7XEMQU.tmp  jar_cache27933.tmp

# cp -a /tmp/jar_cache27940.tmp /tmp/test1/test3/jar_cache27933.tmp

vortex:/tmp 12:55 {0}# unison -owner -group -times test1 dest
Contacting server...
Connected [//vortex//tmp/dest -> //vortex//tmp/test1]
Looking for changes
   scanning
Reconciling changes

test1          dest
          ====> props      /  [f] .
changed  ---->            test3/jar_cache27933.tmp  [f] .

Proceed with propagating updates? [] y
Propagating updates


UNISON 2.27.57 started propagating changes at 12:56:05 on 20 Mar 2009
[BGN] Copying properties for  from /tmp/test1 to /tmp/dest
[END] Copying properties for
[BGN] Updating file test3/jar_cache27933.tmp from /tmp/test1 to /tmp/dest
[END] Updating file test3/jar_cache27933.tmp
UNISON 2.27.57 finished propagating changes at 12:56:05 on 20 Mar 2009


Saving synchronizer state
Synchronization complete  (2 items transferred, 0 skipped, 0 failures)
# ls -la /tmp/
total 342
drwxrwxrwt 18 root   root     1368 Mar 20 12:55 ./
drwxr-xr-x 25 root   root      680 Mar  2 18:37 ../
drwxr-xr-x  4 root   root       96 Mar 20 12:49 dest/
drwxr-xr-x  4 root   root       96 Mar 20 12:49 test1/

# ls -la test1 dest/
dest/:
total 1
drwxr-xr-x  4 root root   96 Mar 20 12:49 ./
drwxrwxrwt 18 root root 1368 Mar 20 12:55 ../
drwxr-xr-x  2 root root  152 Mar 20 12:50 test2/
drwxr-xr-x  2 root root  152 Mar 20 12:56 test3/
******* WRONG TIME *************

test1:
total 1
drwxr-xr-x  4 root root   96 Mar 20 12:49 ./
drwxrwxrwt 18 root root 1368 Mar 20 12:55 ../
drwxr-xr-x  2 root root  152 Mar 20 12:50 test2/
drwxr-xr-x  2 root root  152 Mar 20 12:51 test3/

# ls -la test1 dest/test3/
dest/test3/:
total 180
drwxr-xr-x 2 root   root      152 Mar 20 12:56 ./
drwxr-xr-x 4 root   root       96 Mar 20 12:49 ../
-rw------- 1 rhardy rhardy  12057 Mar 19 22:14 49c2fbf3855bd
-rw------- 1 rhardy rhardy   1711 Mar 16 10:12 7XEMQU.tmp
-rw-r--r-- 1 rhardy rhardy 167887 Mar 15 13:33 jar_cache27933.tmp

test1:
total 1
drwxr-xr-x  4 root root   96 Mar 20 12:49 ./
drwxrwxrwt 18 root root 1368 Mar 20 12:55 ../
drwxr-xr-x  2 root root  152 Mar 20 12:50 test2/
drwxr-xr-x  2 root root  152 Mar 20 12:51 test3/


Regards,
Rob

--
Robert Hardy, B.Eng Computer Systems
Systems Analyst/Software Developer/I.T. Specialist
Teledyne Controls Simulation
105-2255 St Laurent Blvd
Ottawa, ON K1G 4K3 Canada
+16135262059 ex 355
Fax +16135265751

On Mon, 2 Feb 2009, Benjamin Pierce wrote:
> Hi Rob,
>
> With just this patch, if an updated file is transferred by Unison,
> won't its parent directory's modtime then be wrong on the receiving
> host?
>
> Best,
>
>    - Benjamin
>
>
> On Feb 2, 2009, at 6:20 PM, Robert Hardy wrote:
>> There seems to be a bug in the unison -times option in that it ignores
>> directory times. I found some comments in BUGS.txt that suggests this
>> needed OCAML changes. I can't see why that comment is there. With some
>> suggestions from freenode's #ocaml I came up with this patch which works
>> on Linux.
>>
>> I was syncing large quanties of data between an el4 and el5 box. Ignoring
>> the directory times caused me a lot of problems.
>>
>> I suspect this patch should also be extended for Unix.S_LNK as currently
>> unison with -owner -group -times should set the user/owner for links and
>> it does not.
>>
>> Here is a simple patch which in basic testing under el5 seems to fix
>> this problem:
>>
>> http://webcon.ca/~rhardy/utmp/unison-2.27.57-dir_times.patch
>>
>> diff -urNbBp unison-2.27.57/props.ml.orig unison-2.27.57/props.ml
>> --- unison-2.27.57/props.ml.orig	2007-04-01 23:03:20.000000000 -0400
>> +++ unison-2.27.57/props.ml	2009-02-02 14:22:07.000000000 -0500
>> @@ -501,6 +501,8 @@ let get stats _ =
>>    let v = stats.Unix.LargeFile.st_mtime in
>>    if stats.Unix.LargeFile.st_kind = Unix.S_REG && Prefs.read sync
>> then
>>      Synced v
>> +  else if stats.Unix.LargeFile.st_kind = Unix.S_DIR && Prefs.read
>> sync then
>> +    Synced v
>>    else
>>      NotSynced v



More information about the Unison-hackers mailing list