diff options
Diffstat (limited to 'install')
-rwxr-xr-x | install | 32 |
1 files changed, 31 insertions, 1 deletions
@@ -34,19 +34,49 @@ diff() { echo ERROR: Directory without trailing slash detected: $1 exit 1 fi + # Got trough all files ignoring git repositories for f in `find "$1" \( -type d -exec test -e '{}'/.git \; \) -prune -o -type f -print`; do F="${f#$1}" - echo $f dodiff "$1/$F" "$2/$F" done + # Check if we have all directories ignoring those in git repositories + for d in `find "$1" -type d -print -exec test -e '{}'/.git \; -prune`; do + D="${d#$1}" + if [ ! -d "$2/$D" ]; then + echo "Directory not installed: $1/$D => $2/$D" + read -p "Install? (Y/n) " + if [[ $REPLY =~ ^[Yy]?$ ]]; then + doinst "$1/$D/" "$2/$D" + fi + fi + done + # Now checkout git repositories + for g in `find "$1" -name .git -type f -printf '%h '`; do + G="${g#$1}" + COMMIT=$( cd "$1/$G" && git rev-parse HEAD ) + echo "Checkout of git repository: $2/$G" + ( cd "$2/$G" && git --work-tree=. checkout -f "$COMMIT" ) + done else dodiff "$1" "$2" fi } +# Managing two git trees with master has small inconvenience that git allows only +# single branch checkout in all work trees, so as it sets now git will execute all +# commands not on deployed tree but on tree in this repository, so we need specify +# work tree on command line every time we want target deployed work tree. doinst() { echo rsync -rlpt $1 $2 rsync -rlpt $1 $2 + # Now edit all .git files in target directory + for g in `find "$2" -name '.git' -type f`; do + if ! grep -q "gitdir: " "$g"; then + continue # Probably not a git repository or who knows. + fi + echo "Pointing git repository $g to this repository" + echo gitdir: $PWD/.git`sed "s/^gitdir: [./]*git//" "$g"` > "$g" + done } inst() { if [ -e "$2" ]; then |