aboutsummaryrefslogtreecommitdiffstats
path: root/tools/merge-all-source-plugins
blob: 42e5288c3960d0676c84b74c4416854ec6491e70 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/sh

#If a version is set then we only try merging a source plugin with matching version as a generic one could change the ABI to master HEAD
merge_internal(){ # $1=repository, $2=refspec
    branch="sourceplugin-$2"
    if [ -n "$version" ] ; then
        branch="$branch-$version"
    fi
    git pull --no-rebase --log --stat --commit --no-edit "$1" "$branch"
}

unset succeeded failed version

merge(){ # $1=repository, $2=refspec
    merge_internal "$1" "$2" || {
        git reset --hard
        echo merge of $1 $2 failed, continuing with other plugins
        failed="$failed $2"
        return 0
    }
    succeeded="$succeeded $2"
}

error(){
    echo $1
    exit 1
}

git diff --exit-code >/dev/null ||\
    error "Please commit local changes first"

git diff --cached --exit-code >/dev/null ||\
    error "Please commit local changes first"

#version="12.34"

[ $# -ne 1 ] &&\
    error "Usage: $0 source-plugins.txt"

while IFS=' ' read -r a b; do
    case "$a" in
        ''|'#'*) continue ;;
    esac

    merge "$a" "$b"
done < "$1"

[ -n "$version"  ] && echo version: $version
[ -n "$succeeded" ] && echo Succeeded merging: $succeeded
[ -n "$failed"   ] && echo Failed merging: $failed