@echo off set LOCAL_REPO="%USERPROFILE%\Documents" set REMOTE_REPO="h:\Documents" set SSH_REPO="ssh://%USERNAME%@sfs/Documents" set SSHHOST="sfs" set PATH=C:\Progra~1\Mercurial;C:\Windows\System32\OpenSSH;C:\Windows\System32; If exist "%USERPROFILE%\.ssh\id_rsa" ( If exist "%USERPROFILE%\.ssh\known_hosts" ( echo SSH env ready xcopy /Y /S H:\.ssh %USERPROFILE%\.ssh\ ) else ( echo Setting up SSH env mkdir %USERPROFILE%\.ssh xcopy /Y /S H:\.ssh %USERPROFILE%\.ssh\ ssh -oStrictHostKeyChecking=no %USERNAME%@%SSHHOST% "id" ) ) else ( echo Setting up SSH env mkdir %USERPROFILE%\.ssh xcopy /Y /S H:\.ssh %USERPROFILE%\.ssh\ ssh -oStrictHostKeyChecking=no %USERNAME%@%SSHHOST% "id" ) If exist "%LOCAL_REPO%\.hg" ( If exist "%REMOTE_REPO%\.hg" ( goto Remoteandlocal ) else ( goto onlylocal ) ) else If exist "%REMOTE_REPO%\.hg" ( goto onlyremote ) else If exist "%LOCAL_REPO%\.hg" ( goto onlylocal ) else ( goto missingonboth ) goto end :Remoteandlocal Echo File exist remote and local c: cd %LOCAL_REPO% hg addremove hg --config ui.username=%USERNAME% commit -m "update from %COMPUTERNAME%" hg pull %SSH_REPO% hg merge -t "W:\scripts\merge.bat" hg resolve -t internal:other --all hg update hg addremove hg --config ui.username=%USERNAME% commit -m "merge update from %COMPUTERNAME%" hg push %SSH_REPO% echo "remote update start" ssh %USERNAME%@sfs "/scripts/hgsync_login.sh" echo "remote update end" hg pull %SSH_REPO% hg update goto END :onlylocal Echo File exist only local echo "remote init start" ssh %USERNAME%@sfs "/scripts/hgsync_init.sh" echo "remote init end" c: cd %LOCAL_REPO% hg addremove hg --config ui.username=%USERNAME% commit -m "update from %COMPUTERNAME%" hg push %SSH_REPO% echo "remote update start" ssh %USERNAME%@sfs "/scripts/hgsync_login.sh" echo "remote update end" hg pull %SSH_REPO% hg merge -t "W:\scripts\merge_other.bat" hg resolve -t internal:local --all hg update hg addremove hg --config ui.username=%USERNAME% commit -m "merge update from %COMPUTERNAME%" hg push %SSH_REPO% h: cd %SSH_REPO% hg update goto END :onlyremote Echo File exist only remote c: cd %LOCAL_REPO% hg init hg pull %SSH_REPO% hg addremove hg --config ui.username=%USERNAME% commit -m "update from %COMPUTERNAME%" hg merge -t "W:\scripts\merge.bat" hg resolve -t internal:other --all hg update hg addremove hg --config ui.username=%USERNAME% commit -m "merge update from %COMPUTERNAME%" hg push %SSH_REPO% echo "remote update start" ssh %USERNAME%@sfs "/scripts/hgsync_update.sh" echo "remote update end" goto END :missingonboth Echo missing on both mkdir %LOCAL_REPO% C: cd %LOCAL_REPO% hg init echo "remote init start" ssh %USERNAME%@sfs "/scripts/hgsync_init.sh" echo "remote init end" hg addremove hg --config ui.username=%USERNAME% commit -m "update from %COMPUTERNAME%" hg push %SSH_REPO% echo "remote update start" ssh %USERNAME%@sfs "/scripts/hgsync_logout.sh" echo "remote update end" hg pull %SSH_REPO% hg merge -t "W:\scripts\merge_other.bat" hg resolve -t internal:local --all hg update hg addremove hg --config ui.username=%USERNAME% commit -m "merge update from %COMPUTERNAME%" hg push %SSH_REPO% echo "remote update start" ssh %USERNAME%@sfs "/scripts/hgsync_update.sh" echo "remote update end" goto END :END echo done