summaryrefslogtreecommitdiffstats
path: root/packaging/update-tags
blob: 6823fce1cbd1c5936835b3b3f0cfe36ad9984b19 (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
#!/bin/bash

#
# update-tags
#
scriptname=update-tags
if ! MYTMP=$(mktemp -d -t $scriptname-XXXXXX)
then
            echo >&2
            echo >&2
            echo >&2 "Cannot create temporary directory."
            echo >&2
            exit 1
fi

cleanup() {
  status=$?
  if [ $status -ne 0 ]
  then
    echo "FAILED."
    if [ "$TAGVER" ]
    then
      git tag -d "$TAGVER"
    fi
    echo "To re-run manually:"
    echo "  git diff HEAD^ | ./packaging/update-tags -"
    echo "To undo commit:"
    echo "  git reset HEAD^"
  fi
  rm -rf "${MYTMP}"
  exit $status
}

# clean up if we get stopped by Crtl-C or forced logout or normal exit
trap cleanup INT
trap cleanup HUP
trap cleanup 0

set -e
if [ "$1" = "--debug" ]
then
  set -x
  shift
fi

if [ $# -lt 1 ]
then
  echo "Use only from .git/hooks/post-commit"
  exit 1
fi

if [ ! -x packaging/update-tags ]
then
  echo "Must be run from base directory"
  exit 1
fi

if [ "$1" = "-" ]
then
  from_cache=Y
  f=""
else
  from_cache=
  for f in "$@"
  do
    if [ ! -f "$f" ]
    then
      echo "$f: no such file"
      exit 1
    fi
  done

  git status --porcelain "$@" | grep "^?" | cut -c4- > $MYTMP/missing.lst

  while read missing
  do
     git update-index --add --cacheinfo \
          100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 $missing
  done < $MYTMP/missing.lst

  empty_tree=4b825dc642cb6eb9a060e54bf8d69288fbee4904
  git diff $empty_tree -- "$@" > $MYTMP/diff.full
  f=$MYTMP/diff.full

  while read missing
  do
     git update-index --force-remove $missing
  done < $MYTMP/missing.lst
fi

> $MYTMP/diff.lst sed -e "/^+++ b/{p;s:^+++ b/::;w $MYTMP/files.lst" -e "d;}" $f

#cat $MYTMP/diff.lst
#cat $MYTMP/files.lst

dirname="${0%/*}"
if [ "$dirname" = "$0" ]; then dirname="."; fi
source $dirname/packaging.functions

status=0
while read filename
do
  #echo Checking $filename
  case $filename in
    configure.ac|ChangeLog)
      mkdir -p $MYTMP/files
      git show HEAD:configure.ac > $MYTMP/files/configure.ac
      version=`get_configure_ac_version`
      case "$(match_version $version)" in
         prerelease|candidate|release)
           do_release=Y
         ;;
      esac
    ;;
    *)
      #echo "No checks found for $filename"
      :
    ;;
  esac
done < $MYTMP/files.lst

if [ "$do_release" ]
then
  echo "Tagging new release with:"
  echo "   git tag -s \"v$version\" -m \"Release version $version\""
  git tag -s "v$version" -m "Release version $version"
  TAGVER="v$version"

  splitver confmaj confmin conffix confsfx "$version"
  if [ ! "$confsfx" ]
  then
    echo "Incrementing version in configure.ac:"
    conffix=`expr $conffix + 1`
    sed -i -e "s/define(\[VERSION_FIX\], \[.*])/define([VERSION_FIX], [$conffix])/" configure.ac
  fi

  echo "Resetting suffix in configure.ac:"
  sed -i -e 's/define(\[VERSION_SUFFIX\], \[.*])/define([VERSION_SUFFIX], [_master])/' configure.ac
  sed -i -e 's:^PACKAGE_RPM_RELEASE=.*:PACKAGE_RPM_RELEASE="0.0.$(echo VERSION_SUFFIX | sed s/^_//)":' configure.ac

  echo "Committing new configure.ac:"
  git commit --no-verify -m "Post release $version" -- configure.ac
  echo ""
  echo "Verify, then:"
  echo "  git push origin"
  echo "  git push origin tag $TAGVER"
fi

exit $status