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
Next revision Both sides next revision
windows:hgsync [2021/10/20 14:40]
tschulz
windows:hgsync [2021/10/20 14:59]
tschulz [hgsync_login.cmd]
Line 1: Line 1:
 ====== Mercurial Sync Script ====== ====== Mercurial Sync Script ======
  
-===== hgsync_login.cmd ​=====+===== Client Side =====
  
-<code batch hgsync_login.cmd> +==== merge.bat ====
-@echo off+
  
-set LOCAL_REPO="​%USERPROFILE%\Documents"​ +<code batch merge.cmd>​ 
-set REMOTE_REPO="​h:​\Documents"​ +echo %
-set SSH_REPO="​ssh:/​/%USERNAME%@sfs/Documents"​ +copy %1 %1.%COMPUTERNAME%.conflict 
-set PATH=C:​\Progra~1\Mercurial;​C:​\Windows\System32\OpenSSH;​+del /%1.orig 
 +del /Q %1.orig 
 +exit 1 
 +</​code>​
  
-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+==== merge_other.cmd ====
  
 +<code batch merge_other.bat>​
 +echo %2
 +copy %2 %1.%COMPUTERNAME%.conflict
 +del /Q %1.orig
 +exit 1
 +</​code>​
  
-:​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  %REMOTE_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  %REMOTE_REPO% 
-h: 
-cd %REMOTE_REPO% 
-hg --config ui.username=%USERNAME% commit -m "merge 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%"​ 
-c: 
-cd %LOCAL_REPO% 
-hg pull  %REMOTE_REPO% 
-hg update 
-goto END 
- 
-:onlylocal 
-Echo File exist only local 
-mkdir %REMOTE_REPO% 
-H: 
-cd %REMOTE_REPO% 
-hg init 
-c: 
-cd %LOCAL_REPO% 
-hg addremove 
-hg --config ui.username=%USERNAME% commit -m "​update from %COMPUTERNAME%"​ 
-hg push  %REMOTE_REPO% 
-H: 
-cd %REMOTE_REPO% 
-hg addremove 
-hg --config ui.username=%USERNAME% commit -m "​remote 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 "​remote merge update from %COMPUTERNAME%"​ 
-c: 
-cd %LOCAL_REPO% 
-hg pull  %REMOTE_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 %REMOTE_REPO% 
-h: 
-cd %REMOTE_REPO% 
-hg update 
-goto END 
- 
-:onlyremote 
-Echo File exist only remote 
-c: 
-cd %LOCAL_REPO% 
-hg init 
-hg pull  %REMOTE_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 %REMOTE_REPO% 
-h: 
-cd %REMOTE_REPO% 
-hg update 
-goto END 
- 
-:​missingonboth 
-Echo missing on both 
-mkdir %LOCAL_REPO% 
-C: 
-cd %LOCAL_REPO% 
-hg init 
-mkdir %REMOTE_REPO% 
-H: 
-cd %REMOTE_REPO% 
-hg init 
-c: 
-cd %LOCAL_REPO% 
-hg addremove 
-hg --config ui.username=%USERNAME% commit -m "​update from %COMPUTERNAME%"​ 
-hg push %REMOTE_REPO% 
-H: 
-cd %REMOTE_REPO% 
-hg addremove 
-hg --config ui.username=%USERNAME% commit -m "​remote 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 "​remote merge update from %COMPUTERNAME%"​ 
-c: 
-cd %LOCAL_REPO% 
-hg pull  %REMOTE_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 %REMOTE_REPO% 
-h: 
-cd %REMOTE_REPO% 
-hg update 
-goto END 
- 
-:END 
-echo done 
-</​code>​ 
  
-===== hgsync_login_ssh.cmd ​=====+==== hgsync_login_ssh.cmd ====
  
 <code batch hgsync_login_ssh.cmd>​ <code batch hgsync_login_ssh.cmd>​
Line 292: Line 166:
 </​code>​ </​code>​
  
-===== hgsync_logout.cmd ​=====+==== hgsync_logout.cmd ====
  
 <code batch hgsync_logout.cmd>​ <code batch hgsync_logout.cmd>​
Line 437: Line 311:
 :END :END
 echo done echo done
 +</​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
 +        cd ${USERHOME}
 +        chown -R ${PAM_USER} ${USERHOME}/​.ssh
 +        chmod 700 .ssh
 +else
 +        echo "Keys Present"​
 +        chown -R ${PAM_USER} ${USERHOME}/​.ssh
 +        chmod 700 .ssh
 +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>​ </​code>​
windows/hgsync.txt · Last modified: 2021/10/20 16:14 by tschulz