summaryrefslogtreecommitdiff
path: root/build_tools/make_version
blob: ce3bf6e130e685304a34583a2108e6ebf938f479 (plain)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/sh

AWK=${AWK:-awk}
GIT=${GIT:-git}
GREP=${GREP:-grep}
MAINLINE_BRANCH=master

if [ -f ${1}/.version ]; then
    cat ${1}/.version
elif [ -d ${1}/.svn ]; then
    PARTS=`LANG=C svn info ${1} | ${GREP} URL | ${AWK} '{print $2;}' | sed -e 's:^.*/svn/asterisk/::' | sed -e 's:/: :g'`
    BRANCH=0
    TEAM=0
    TAG=0
    FEATURE=0

    REV=`svnversion -c ${1} | cut -d: -f2`

    INTEGRATED=`LANG=C svn pg automerge-propname ${1}`
    if [ -z "${INTEGRATED}" ] ; then
        INTEGRATED=svnmerge-integrated
    fi

    BASE=`LANG=C svn pg ${INTEGRATED} ${1} | cut -d: -f1`

    if [ "${PARTS}" = "trunk" ] ; then
        echo SVN-trunk-r${REV}
        exit 0
    fi

    for PART in $PARTS ; do
        if [ ${TAG} != 0 ] ; then
            if [ "${PART}" = "autotag_for_be" ] ; then
                continue
            fi
            if [ "${PART}" = "autotag_for_sx00i" ] ; then
                continue
            fi
            RESULT="${PART}"
            break
        fi

        if [ ${BRANCH} != 0 ] ; then
            RESULT="${RESULT}-${PART}"
            if [ ${FEATURE} != 0 ] ; then
                RESULT="${RESULT}-${FEATURE_NAME}"
            fi
            break
        fi

        if [ ${TEAM} != 0 ] ; then
            if [ -z "${RESULT}" ] ; then
                RESULT="${PART}"
            else
                RESULT="${RESULT}-${PART}"
            fi
            continue
        fi

        if [ "${PART}" = "certified" ] ; then
            FEATURE=1
            FEATURE_NAME="cert"
            continue
        fi

        if [ "${PART}" = "branches" ] ; then
            BRANCH=1
            RESULT="branch"
            continue
        fi

        if [ "${PART}" = "tags" ] ; then
            TAG=1
            continue
        fi

        if [ "${PART}" = "team" ] ; then
            TEAM=1
            continue
        fi
    done

    if [ ${TAG} != 0 ] ; then
        echo ${RESULT}
    else
        echo SVN-${RESULT}-r${REV}${BASE:+-${BASE}}
    fi
elif [ -d ${1}/.git ]; then
    if [ -z ${GIT} ]; then
        GIT="git"
    fi

    if ! command -v ${GIT} >/dev/null 2>&1; then
        echo "UNKNOWN__and_probably_unsupported"
        exit 1
    fi
	cd ${1}

    # If the first log commit messages indicates that this is checked into
    # subversion, we'll just use the SVN- form of the revision.
    MODIFIED=""
    SVN_REV=`${GIT} log --pretty=full -1 | ${GREP} -F "git-svn-id:" | sed -e "s/.*\@\([^\s]*\)\s.*/\1/g"`
    if [ -z "$SVN_REV" ]; then
        VERSION=`${GIT} describe --long --always --tags --dirty=M 2> /dev/null`
        if [ $? -ne 0 ]; then
            if [ "`${GIT} ls-files -m | wc -l`" != "0" ]; then
                MODIFIED="M"
            fi
            # Some older versions of git do not support all the above
            # options.
            VERSION=`${GIT} rev-parse --short --verify HEAD`${MODIFIED}
        fi
        echo GIT-${MAINLINE_BRANCH}-${VERSION}
    else
        PARTS=`LANG=C ${GIT} log --pretty=full | ${GREP} -F "git-svn-id:" | head -1 | ${AWK} '{print $2;}' | sed -e s:^.*/svn/$2/:: | sed -e 's:/: :g' | sed -e 's/@.*$//g'`
        BRANCH=0
        TEAM=0
        TAG=0
        FEATURE=0

        if [ "`${GIT} ls-files -m | wc -l`" != "0" ]; then
            MODIFIED="M"
        fi

        for PART in $PARTS ; do
            if [ ${TAG} != 0 ] ; then
                if [ "${PART}" = "autotag_for_be" ] ; then
                    continue
                fi
                if [ "${PART}" = "autotag_for_sx00i" ] ; then
                    continue
                fi
                RESULT="${PART}"
                break
            fi

            if [ ${BRANCH} != 0 ] ; then
                RESULT="${RESULT}-${PART}"
                if [ ${FEATURE} != 0 ] ; then
                    RESULT="${RESULT}-${FEATURE_NAME}"
                fi
                break
            fi

            if [ ${TEAM} != 0 ] ; then
                if [ -z "${RESULT}" ] ; then
                    RESULT="${PART}"
                else
                    RESULT="${RESULT}-${PART}"
                fi
                continue
            fi

            if [ "${PART}" = "certified" ] ; then
                FEATURE=1
                FEATURE_NAME="cert"
                continue
            fi

            if [ "${PART}" = "branches" ] ; then
                BRANCH=1
                RESULT="branch"
                continue
            fi

            if [ "${PART}" = "tags" ] ; then
                TAG=1
                continue
            fi

            if [ "${PART}" = "team" ] ; then
                TEAM=1
                continue
            fi

            if [ "${PART}" = "trunk" ]; then
                echo SVN-trunk-r${SVN_REV}${MODIFIED}
                exit 0
            fi
        done

        if [ ${TAG} != 0 ] ; then
            echo ${RESULT}
        else
            echo SVN-${RESULT##-}-r${SVN_REV}${MODIFIED}
        fi
    fi
else
    echo "UNKNOWN__and_probably_unsupported"
fi