View Ticket
Not logged in
Ticket UUID: 4b72e10dca387049db24d2b6d4cc49282bcc9ce9
Title: Pull chain does not work: MASTER -> SLAVE -> LOCAL
Status: Fixed Type: Code_Defect
Severity: Critical Priority: Immediate
Subsystem: one Resolution: Fixed
Last Modified: 2008-07-23 21:00:01
Version Found In: 141c31792b
Description & Comments:
This incident was already mentioned on the mailing list. But I thought it is better to file a ticket to not get it lost.

The problem is, I cloned and pulled from fossil-scm.org to my local central repository and from there into another local one. This is the same chain as if I had a repos.master clone to repos.slave clone to repos.local. So the changes should flow from the MASTER over the SLAVE to LOCAL. But the changes does not reach LOCAL. I have written a small scenario to reproduce that bug. You may copy/paste it into a script and execute it:

# Create the testenv
mkdir -p test1/dir
cd test1/dir
#
# Create the MASTER DB
fossil new ../myrepos.master
fossil open ../myrepos.master 
#
# Add file 'txt'
echo "# line 1" > txt
fossil add txt
fossil commit -m "initial" --nosign
fossil close
rm *
#
# MASTER is connectable via port 8080
fossil server -P 8080 ../myrepos.master &
pid_MASTER=$!
#
# Clone the SLAVE DB
fossil clone http://localhost:8080 ../myrepos.slave
#
# SLAVE is reachable via port 8081
fossil server -P 8081 ../myrepos.slave &
pid_SLAVE=$!
#
# Clone the LOCAL DB
fossil clone http://localhost:8081 ../myrepos.local
#
# Open the MASTER and modify the file 'txt'
fossil open ../myrepos.master 
echo "# line 2" >> txt
fossil commit -m "change 1" --nosign
echo "### Content in MASTER"; cat txt
### Content in MASTER
# line 1
# line 2
fossil close
rm *
#
# Pull all changes from MASTER --> SLAVE
fossil pull -R ../myrepos.slave
#
# Open SLAVE and look at the file 'txt'
fossil open ../myrepos.slave 
echo "### Content in SLAVE"; cat txt
### Content in SLAVE
# line 1
# line 2
fossil close 
rm *
#
# Pull all changes from SLAVE --> LOCAL
fossil pull -R ../myrepos.local 
#
# Open LOCAL and look at the file 'txt'
fossil open ../myrepos.local 
echo "### Content in LOCAL"; cat txt
### Content in LOCAL
# line 1
#
# kill the server MASTER and SLAVE
kill $pid_MASTER $pid_SLAVE

As you can see the file txt will contain two lines in both the MASTER and the SLAVE but it will only contain one line in LOCAL.


drh added on 2008-07-23 21:00:01:
Fixed by check-in 1f8d2501b0. Prior to this fix, work-around by running rebuild on the server repository that is not syncing correctly.