User Tools

Site Tools


windows:hgsync

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
windows:hgsync [2021/10/20 14:35]
tschulz
windows:hgsync [2021/10/20 16:14]
tschulz [userkeygen.sh]
Line 1: Line 1:
 ====== Mercurial Sync Script ====== ====== Mercurial Sync Script ======
  
-<code batch hgsync_login.cmd>+===== Client Side ===== 
 + 
 +==== merge.bat ==== 
 + 
 +<code batch merge.cmd>​ 
 +echo %1 
 +copy %1 %1.%COMPUTERNAME%.conflict 
 +del /Q %1.orig 
 +del /Q %1.orig 
 +exit 1 
 +</​code>​ 
 + 
 + 
 +==== merge_other.cmd ==== 
 + 
 +<code batch merge_other.bat>​ 
 +echo %2 
 +copy %2 %1.%COMPUTERNAME%.conflict 
 +del /Q %1.orig 
 +exit 1 
 +</​code>​ 
 + 
 + 
 +==== hgsync_login_ssh.cmd ==== 
 + 
 +<code batch hgsync_login_ssh.cmd>
 @echo off @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
 </​code>​ </​code>​
  
 +
 +==== hgsync_logout_ssh.cmd ====
 +
 +<code batch hgsync_logout_ssh.cmd>​
 +@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
 +)
 +
 +
 +
 +
 +:​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_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_logout.sh"​
 +echo "​remote update end"
 +hg pull  %SSH_REPO%
 +hg update
 +goto END
 +
 +:onlylocal
 +Echo File exist only local
 +c:
 +cd %LOCAL_REPO%
 +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_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%
 +echo "​remote update start"
 +ssh %USERNAME%@sfs "/​scripts/​hgsync_update.sh"​
 +echo "​remote update end"
 +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_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
 +
 +:​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
 +</​code>​
 +
 +===== Server Side =====
 +
 +==== userkeygen.sh ====
 +<code bash /​scripts/​user_keygen.sh>​
 +#!/bin/bash
 +
 +if [ "echo ${PAM_USER} | grep +" != ""​ ]
 +then
 +        TMP="​`echo ${PAM_USER} | cut -d \"​+\"​ -f2`"
 +        PAM_USER="​${TMP}"​
 +        #echo ${PAM_USER}
 +fi
 +
 +USERHOME="/​vol1/​homes/​${PAM_USER}"​
 +
 +echo "​`date` ${PAM_USER} ${USERHOME} ${PAM_SERVICE}"​ >> /​tmp/​pam_exec.log
 +
 +if [ "`ls ${USERHOME}/​.ssh/​authorized_keys`"​ = ""​ ]
 +then
 +        echo "Keys Missing"​
 +        cd ${USERHOME}
 +        mkdir .ssh
 +        cd .ssh/
 +        ssh-keygen -t rsa -N ""​ -f id_rsa
 +        cp id_rsa.pub authorized_keys
 +        chmod -R 700 ${USERHOME}
 +        chown -R ${PAM_USER} ${USERHOME}
 +
 +else
 +        echo "Keys Present"​
 +        chmod -R 700 ${USERHOME}
 +        chown -R ${PAM_USER} ${USERHOME}
 +
 +fi
 +</​code>​
 +
 +==== hgsync_init.sh ====
 +<code bash /​scripts/​hgsync_init.sh>​
 +#!/bin/sh
 +
 +mkdir -p ~/Documents
 +cd ~/Documents
 +hg init
 +</​code>​
 +
 +==== hgsync_login.sh ====
 +<code bash /​scripts/​hgsync_login.sh>​
 +#!/bin/sh
 +
 +cd ~/Documents
 +hg commit -m "merge update"​
 +hg merge -t internal:​local
 +hg update
 +hg addremove
 +hg commit -m "merge update"​
 +</​code>​
 +
 +==== hgsync_logout.sh ====
 +<code bash /​scripts/​hgsync_logout.sh>​
 +#!/bin/sh
 +
 +cd ~/Documents
 +hg commit -m "merge update"​
 +hg merge -t internal:​other
 +hg update
 +hg addremove
 +hg commit -m "merge update"​
 +</​code>​
 +
 +==== hgsync_update.sh ====
 +<code bash /​scripts/​hgsync_update.sh>​
 +#!/bin/sh
 +
 +cd ~/Documents
 +hg update
 +</​code>​
 +
 +==== /​etc/​pam.d/​common-session ====
 +<code pam/​etc/​pam.d/​common-session>​
 +...
 +session ​   required ​   pam_mkhomedir.so skel=/​etc/​skel/​ umask=0077
 +session ​   optional ​   pam_exec.so /​bin/​bash ​ /​scripts/​user_keygen.sh
 +...
 +</​code>​
windows/hgsync.txt · Last modified: 2021/10/20 16:14 by tschulz