Skip based on checksum not worked as expected when using with complex filter rules.

Hongyi Zhao hongyi.zhao at gmail.com
Fri Apr 17 19:21:46 MDT 2015


Hi all,

I've a local repository for Debian, and I'm doing some rsync testings on 
it.  See the following commands for detail:

werner at debian:~/software/LocalRepo$ rsync -amvHKLPRSB131072 -n \ 
ftp.uk.debian.org::debian/./dists/wheezy-updates/main/\
debian-installer/binary-amd64/Packages.gz \
repo.debian.local/debian/
[snip]
dists/wheezy-updates/main/debian-installer/binary-amd64/Packages.gz

sent 46 bytes  received 202 bytes  55.11 bytes/sec
total size is 20  speedup is 0.08 (DRY RUN)

werner at debian:~/software/LocalRepo$ rsync -amvHKLPRSB131072 -nc \ 
ftp.uk.debian.org::debian/./dists/wheezy-updates/main/\
debian-installer/binary-amd64/Packages.gz \
repo.debian.local/debian/
[snip]
sent 46 bytes  received 218 bytes  58.67 bytes/sec
total size is 20  speedup is 0.08 (DRY RUN)

As you can see, if I use checksum on that package, it shown that it's 
just the same to my local copy, so there is not need to be rsynced.

But when I use a complex rsync filter rules script based on checksum and 
others to check all of the stuff based on the corresponding rules, it 
shows that the above package need to be updated, see the following for 
detail:

1- My script is named as su_dists.rsync and the content of it is as 
follows, sorry for its complex ;-( 

___________ begin su_dists.rsync ____________

rsync -amvHKLPRSB131072 -nc --delete --delete-excluded \
-f +_dists/wheezy/**Translation-en* \
-f +_dists/wheezy/**binary-all/Packages.gz \
-f +_dists/wheezy/Release* \
-f P_dists/wheezy-backports/**Translation-en* \
-f P_dists/wheezy-backports/**binary-all/Packages.gz \
-f P_dists/wheezy-backports/Release* \
-f P_dists/wheezy-proposed-updates/**Translation-en* \
-f P_dists/wheezy-proposed-updates/**binary-all/Packages.gz \
-f P_dists/wheezy-proposed-updates/Release* \
-f +_dists/wheezy-updates/**Translation-en* \
-f +_dists/wheezy-updates/**binary-all/Packages.gz \
-f +_dists/wheezy-updates/Release* \
-f +_dists/wheezy/**binary-amd64/Packages.gz \
-f +_dists/wheezy/**installer-amd64/current/*** \
-f P_dists/wheezy-backports/**binary-amd64/Packages.gz \
-f P_dists/wheezy-backports/**installer-amd64/current/*** \
-f P_dists/wheezy-proposed-updates/**binary-amd64/Packages.gz \
-f P_dists/wheezy-proposed-updates/**installer-amd64/current/*** \
-f +_dists/wheezy-updates/**binary-amd64/Packages.gz \
-f +_dists/wheezy-updates/**installer-amd64/current/*** \
-f +_dists/wheezy/**binary-i386/Packages.gz \
-f +_dists/wheezy/**installer-i386/current/*** \
-f P_dists/wheezy-backports/**binary-i386/Packages.gz \
-f P_dists/wheezy-backports/**installer-i386/current/*** \
-f P_dists/wheezy-proposed-updates/**binary-i386/Packages.gz \
-f P_dists/wheezy-proposed-updates/**installer-i386/current/*** \
-f +_dists/wheezy-updates/**binary-i386/Packages.gz \
-f +_dists/wheezy-updates/**installer-i386/current/*** \
-f P_dists/jessie/*** \
-f P_dists/jessie-backports/*** \
-f P_dists/jessie-proposed-updates/*** \
-f P_dists/jessie-updates/*** \
-f P_pool/*** \
-f +_dists/***/ \
-f -_* ftp.uk.debian.org::debian/./ ./repo.debian.local/debian/

___________ end su_dists.rsync ____________

2- Then, I run my above script as follows to obtain all of the files 
filtered-out according to my filter rules and checkout the ones need to 
be updated based on checksum:  

werner at debian:~/software/LocalRepo$ bash su_dists.rsync|awk -F'/' \
'/^dists/ && $NF'
dists/wheezy-updates/Release
dists/wheezy-updates/Release.gpg
dists/wheezy-updates/contrib/binary-i386/Packages.gz
dists/wheezy-updates/contrib/debian-installer/binary-amd64/Packages.gz
dists/wheezy-updates/contrib/debian-installer/binary-i386/Packages.gz
dists/wheezy-updates/main/debian-installer/binary-amd64/Packages.gz
dists/wheezy-updates/main/debian-installer/binary-i386/Packages.gz
dists/wheezy-updates/non-free/binary-amd64/Packages.gz
dists/wheezy-updates/non-free/binary-i386/Packages.gz
dists/wheezy-updates/non-free/debian-installer/binary-amd64/Packages.gz
dists/wheezy-updates/non-free/debian-installer/binary-i386/Packages.gz
dists/wheezy-updates/non-free/i18n/Translation-en.bz2
dists/wheezy/contrib/debian-installer/binary-all/Packages.gz
dists/wheezy/contrib/debian-installer/binary-amd64/Packages.gz
dists/wheezy/contrib/debian-installer/binary-i386/Packages.gz
dists/wheezy/non-free/debian-installer/binary-all/Packages.gz
dists/wheezy/non-free/debian-installer/binary-amd64/Packages.gz
dists/wheezy/non-free/debian-installer/binary-i386/Packages.gz

As you can see, this time, the following file is considered to be updated:

dists/wheezy-updates/main/debian-installer/binary-amd64/Packages.gz

But it has been considered not need to be updated in my first run with 
the -c/--checksum option from the terminal other than the bash srcipt.

3- If I change my bash script into the following form, i.e., with the `--
no-t' option added to the args list:

___________ begin su_dists.rsync ____________

rsync -amvHKLPRSB131072 -nc --no-t --delete --delete-excluded \
-f +_dists/wheezy/**Translation-en* \
-f +_dists/wheezy/**binary-all/Packages.gz \
-f +_dists/wheezy/Release* \
-f P_dists/wheezy-backports/**Translation-en* \
-f P_dists/wheezy-backports/**binary-all/Packages.gz \
-f P_dists/wheezy-backports/Release* \
-f P_dists/wheezy-proposed-updates/**Translation-en* \
-f P_dists/wheezy-proposed-updates/**binary-all/Packages.gz \
-f P_dists/wheezy-proposed-updates/Release* \
-f +_dists/wheezy-updates/**Translation-en* \
-f +_dists/wheezy-updates/**binary-all/Packages.gz \
-f +_dists/wheezy-updates/Release* \
-f +_dists/wheezy/**binary-amd64/Packages.gz \
-f +_dists/wheezy/**installer-amd64/current/*** \
-f P_dists/wheezy-backports/**binary-amd64/Packages.gz \
-f P_dists/wheezy-backports/**installer-amd64/current/*** \
-f P_dists/wheezy-proposed-updates/**binary-amd64/Packages.gz \
-f P_dists/wheezy-proposed-updates/**installer-amd64/current/*** \
-f +_dists/wheezy-updates/**binary-amd64/Packages.gz \
-f +_dists/wheezy-updates/**installer-amd64/current/*** \
-f +_dists/wheezy/**binary-i386/Packages.gz \
-f +_dists/wheezy/**installer-i386/current/*** \
-f P_dists/wheezy-backports/**binary-i386/Packages.gz \
-f P_dists/wheezy-backports/**installer-i386/current/*** \
-f P_dists/wheezy-proposed-updates/**binary-i386/Packages.gz \
-f P_dists/wheezy-proposed-updates/**installer-i386/current/*** \
-f +_dists/wheezy-updates/**binary-i386/Packages.gz \
-f +_dists/wheezy-updates/**installer-i386/current/*** \
-f P_dists/jessie/*** \
-f P_dists/jessie-backports/*** \
-f P_dists/jessie-proposed-updates/*** \
-f P_dists/jessie-updates/*** \
-f P_pool/*** \
-f +_dists/***/ \
-f -_* ftp.uk.debian.org::debian/./ ./repo.debian.local/debian/

___________ end su_dists.rsync ____________

This time, I will obtain the correct file-lists that should be updated 
based on the checksum checking, see following for detail:

werner at debian:~/software/LocalRepo$ bash su_dists.rsync|awk -F'/' \
'/^dists/ && $NF'
dists/wheezy-updates/Release
dists/wheezy-updates/Release.gpg
dists/wheezy-updates/non-free/i18n/Translation-en.bz2

As you can see, for my case, there only have three files which need to be 
updated all toghether at the moment.

Any hints on the above issues?

Regards
-- 
.: Hongyi Zhao [ hongyi.zhao AT gmail.com ] Free as in Freedom :.



More information about the rsync mailing list