aboutsummaryrefslogtreecommitdiff
path: root/install
diff options
context:
space:
mode:
authorKarel Kočí <karel.koci@nic.cz>2016-09-09 11:09:38 +0200
committerKarel Kočí <karel.koci@nic.cz>2016-09-09 11:09:38 +0200
commite580bd60607f2a4420eacd681ec029c8b3838953 (patch)
tree2ab970d234672492506b608173e170e93ffde03d /install
parent3d0723aa76dd7ab66d13bb21e9157e2f279dd6a7 (diff)
downloadmyconfigs-e580bd60607f2a4420eacd681ec029c8b3838953.tar.gz
myconfigs-e580bd60607f2a4420eacd681ec029c8b3838953.tar.bz2
myconfigs-e580bd60607f2a4420eacd681ec029c8b3838953.zip
install script support git repositories
Diffstat (limited to 'install')
-rwxr-xr-xinstall32
1 files changed, 31 insertions, 1 deletions
diff --git a/install b/install
index a4a7b73..b71a5e1 100755
--- a/install
+++ b/install
@@ -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