Last active 3 days ago

botanikanet revised this gist 3 days ago. Go to revision

1 file changed, 18 insertions, 16 deletions

update_all_git_repo.sh

@@ -1,20 +1,22 @@
1 1 #!/bin/bash
2 2
3 3 usage() {
4 - echo "Usage ${0} [[--ignore|-i] dir_name] [--main]"
4 + echo "Usage ${0} [[--ignore|-i] dir_name] [--main]"
5 5 echo " --help Show this help"
6 6 echo " --main Checkout to main branch"
7 7 echo " --ignore=* Ignore folders"
8 - exit 1
8 + exit 1
9 9 }
10 10
11 11 find_folders() {
12 - set -- ./ -name ".git" -type d
13 - for IGNORE_FOLDER in ${IGNORE_FOLDERS}
14 - do
15 - set -- "$@" -not -path '"*/'${IGNORE_FOLDER}'/*"'
16 - done
17 - find $@
12 + FIND_ARGS=(.)
13 + FIND_ARGS+=("-name" ".git")
14 + FIND_ARGS+=("-type" "d")
15 + for IGNORE_FOLDER in ${IGNORE_FOLDERS}
16 + do
17 + FIND_ARGS+=("-not" "-path" "*/${IGNORE_FOLDER}/*")
18 + done
19 + find "${FIND_ARGS[@]}"
18 20 }
19 21
20 22 # Map long options to short ones and rebuild argv
@@ -59,21 +61,21 @@ do
59 61 if [[ "$MASTER_BRANCH" == "$CURRENT_BRANCH" ]]
60 62 then
61 63 git pull --all
62 - git remote prune origin
64 + git remote prune origin
63 65 else
64 66 git checkout ${MASTER_BRANCH}
65 67 git pull --all
66 - git remote prune origin
67 - if [[ -z "${FLAG_SWITCH_TO_MAIN}" ]]
68 - then
69 - git checkout ${CURRENT_BRANCH} || echo "[WARN] current brach has been deleted"
70 - fi
68 + git remote prune origin
69 + if [[ -z "${FLAG_SWITCH_TO_MAIN}" ]]
70 + then
71 + git checkout ${CURRENT_BRANCH} || echo "[WARN] current brach has been deleted"
72 + fi
71 73 fi
72 - git branch --merged | grep -v "^*\|${MASTER_BRANCH}" | xargs -r git branch -D
74 + git branch --merged | grep -v "^*\|${MASTER_BRANCH}" | xargs -r git branch -D
73 75 if [ ! -z "$UNCOMMIT_CHANGES" ]
74 76 then
75 77 git stash pop
76 78 fi
77 79 unset UNCOMMIT_CHANGES MASTER_BRANCH CURRENT_BRANCH
78 80 popd > /dev/null
79 - done
81 + done

botanikanet revised this gist 2 months ago. Go to revision

1 file changed, 79 insertions

update_all_git_repo.sh(file created)

@@ -0,0 +1,79 @@
1 + #!/bin/bash
2 +
3 + usage() {
4 + echo "Usage ${0} [[--ignore|-i] dir_name] [--main]"
5 + echo " --help Show this help"
6 + echo " --main Checkout to main branch"
7 + echo " --ignore=* Ignore folders"
8 + exit 1
9 + }
10 +
11 + find_folders() {
12 + set -- ./ -name ".git" -type d
13 + for IGNORE_FOLDER in ${IGNORE_FOLDERS}
14 + do
15 + set -- "$@" -not -path '"*/'${IGNORE_FOLDER}'/*"'
16 + done
17 + find $@
18 + }
19 +
20 + # Map long options to short ones and rebuild argv
21 + translated=()
22 + while (( $# )); do
23 + case "$1" in
24 + --help) translated+=("-h"); shift ;;
25 + --main) translated+=("-m"); shift ;;
26 + --ignore=*) translated+=("-i" "${1#*=}"); shift ;;
27 + --) translated+=("--"); shift; translated+=("$@"); set -- ;;
28 + *) translated+=("$1"); shift ;;
29 + esac
30 + done
31 + set -- "${translated[@]}"
32 +
33 + IGNORE_FOLDERS=""
34 + FLAG_SWITCH_TO_MAIN=""
35 +
36 + while getopts ":hmi:" opt; do
37 + case "$opt" in
38 + h) usage;;
39 + m) FLAG_SWITCH_TO_MAIN=1;;
40 + i) IGNORE_FOLDERS="${IGNORE_FOLDERS} ${OPTARG}";;
41 + :) echo "Missing arg for -$OPTARG"; usage;;
42 + \?) echo "Invalid option: -$OPTARG"; usage;;
43 + esac
44 + done
45 +
46 + for DIR in $(find_folders)
47 + do
48 + pushd ${PWD} > /dev/null
49 + echo "[DEBUG] Work with $(dirname ${DIR})"
50 + cd $(dirname ${DIR})
51 + if [[ -n $(git status --porcelain) ]]
52 + then
53 + echo "[WARN] There are uncommitted changes."
54 + declare UNCOMMIT_CHANGES=1
55 + git stash
56 + fi
57 + declare MASTER_BRANCH="$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')"
58 + declare CURRENT_BRANCH="$(git branch --show-current)"
59 + if [[ "$MASTER_BRANCH" == "$CURRENT_BRANCH" ]]
60 + then
61 + git pull --all
62 + git remote prune origin
63 + else
64 + git checkout ${MASTER_BRANCH}
65 + git pull --all
66 + git remote prune origin
67 + if [[ -z "${FLAG_SWITCH_TO_MAIN}" ]]
68 + then
69 + git checkout ${CURRENT_BRANCH} || echo "[WARN] current brach has been deleted"
70 + fi
71 + fi
72 + git branch --merged | grep -v "^*\|${MASTER_BRANCH}" | xargs -r git branch -D
73 + if [ ! -z "$UNCOMMIT_CHANGES" ]
74 + then
75 + git stash pop
76 + fi
77 + unset UNCOMMIT_CHANGES MASTER_BRANCH CURRENT_BRANCH
78 + popd > /dev/null
79 + done
Newer Older