Created
April 5, 2017 21:57
-
-
Save gaieges/6544b7cb943d023970b3defef620ff24 to your computer and use it in GitHub Desktop.
easier way to use subtrees
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
REPOS="$(cat $(dirname $0)/.subtree)" | |
usage() { | |
echo "usage: $(basename $0) <command>" | |
echo "commands are: " | |
echo " init sets up all remotes and subtrees locally" | |
echo " this is required for any other actions" | |
echo "" | |
echo " pull <ms|'all'> pulls a specific ms, or all configured" | |
echo " repos from master" | |
echo "" | |
echo " push <ms|'all'> pushes a specific ms, or all configured" | |
echo " repos to master" | |
exit 0 | |
} | |
pull_repos() { | |
selected_ms=${1:-'all'} | |
if [[ $selected_ms == 'all' ]]; then | |
repos=$REPOS | |
else | |
for ms in $selected_ms; do | |
repos="$repos $(get_repo_from_ms $ms)" | |
done | |
fi | |
# do pull of selected or all ms's | |
for repo in $repos; do | |
ms=$(get_ms_from_repo $repo) | |
git subtree pull --squash --prefix=$ms/ $ms master | |
done | |
} | |
push_repos() { | |
ms=${@:-'all'} | |
if [ $ms == 'all' ]; then | |
ms="" | |
for repo in $REPOS; do | |
ms="$ms $(get_ms_from_repo $repo)" | |
done | |
else | |
repos="$(get_repo_from_ms)" | |
fi | |
for m in $ms; do | |
git subtree push --prefix=$m/ $m $(cd $m ; git rev-parse --abbrev-ref HEAD) | |
done | |
} | |
init_repos() { | |
for repo in $REPOS; do | |
ms=$(get_ms_from_repo $repo) | |
git remote add $ms $repo \ | |
&& git subtree add --squash --prefix=$ms/ $ms master | |
done | |
} | |
set_branch() { | |
echo not done | |
} | |
get_ms_from_repo() { | |
echo $(echo $1 | sed -E 's/.*\/([a-z]+).git/\1/') | |
} | |
get_repo_from_ms() { | |
echo $(echo $REPOS | grep $1) | |
} | |
CMD=${1:-help} | |
cd $(dirname $0) | |
case $CMD in | |
pull) | |
shift | |
pull_repos $@ | |
;; | |
init) | |
shift | |
init_repos $@ | |
;; | |
push) | |
shift | |
push_repos $@ | |
;; | |
setbranch) | |
shift | |
set_branch $@ | |
;; | |
*|help) | |
usage | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment