VirtualBox

source: vbox/trunk/tools/bin/backport-commit.sh@ 85914

Last change on this file since 85914 was 85668, checked in by vboxsync, 4 years ago

Forwardported r139797: backport*.sh: acceept revision ranges on the command line too, sharing code with the svn:merge-info parsing.

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1# !kmk_ash
2# $Id: backport-commit.sh 85668 2020-08-10 15:25:45Z vboxsync $
3## @file
4# Script for committing a backport from trunk.
5#
6
7#
8# Copyright (C) 2020 Oracle Corporation
9#
10# This file is part of VirtualBox Open Source Edition (OSE), as
11# available from http://www.virtualbox.org. This file is free software;
12# you can redistribute it and/or modify it under the terms of the GNU
13# General Public License (GPL) as published by the Free Software
14# Foundation, in version 2 as it comes in the "COPYING" file of the
15# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17#
18
19#
20# Determin script dir so we can source the common bits.
21#
22MY_SED=kmk_sed
23MY_SCRIPT_DIR=`echo "$0" | "${MY_SED}" -e 's|\\\|/|g' -e 's|^\(.*\)/[^/][^/]*$|\1|'` # \ -> / is for windows.
24if test "${MY_SCRIPT_DIR}" = "$0"; then
25 MY_SCRIPT_DIR=`pwd -L`
26else
27 MY_SCRIPT_DIR=`cd "${MY_SCRIPT_DIR}"; pwd -L` # pwd is built into kmk_ash.
28fi
29
30#
31# This does a lot.
32#
33MY_SCRIPT_NAME="backport-commit.sh"
34. "${MY_SCRIPT_DIR}/backport-common.sh"
35
36#
37# If no revisions was given, try figure it out from the svn:merge-info
38# property.
39#
40if test -z "${MY_REVISIONS}"; then
41 MY_REV_TMP=backport-revisions.tmp
42 if ! svn di --properties-only --depth empty "${MY_BRANCH_DIR}" > "${MY_REV_TMP}"; then
43 echo "error: failed to get revisions from svn:mergeinfo (svn)"
44 exit 1;
45 fi
46 for MY_REV in $("${MY_SED}" -e '/ *Merged \//!d' -e "s/^ [^:]*:[r]*//" -e 's/,[r]*/ /g' "${MY_REV_TMP}");
47 do
48 case "${MY_REV}" in
49 [0-9][0-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9][0-9][0-9])
50 AddRevision "${MY_REV}"
51 ;;
52 [0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9])
53 AddRevisionRange "${MY_REV}"
54 ;;
55
56 *) echo "error: failed to get revisions from svn:mergeinfo - does not grok: ${MY_ARG}"
57 exit 1;;
58 esac
59 done
60 "${MY_RM}" -f -- "${MY_REV_TMP}"
61 if test -z "${MY_REVISIONS}"; then
62 echo "error: No backported revisions found";
63 exit 1;
64 fi
65 echo "info: Detected revisions: ${MY_REVISIONS}"
66fi
67
68#
69# Generate the commit message into MY_MSG_FILE.
70#
71test -n "${MY_DEBUG}" && echo "MY_REVISIONS=${MY_REVISIONS}"
72MY_MSG_FILE=backport-commit.txt
73MY_TMP_FILE=backport-commit.tmp
74
75if test "${MY_REVISION_COUNT}" -eq 1; then
76 # Single revision, just prefix the commit message.
77 MY_REV=`echo ${MY_REVISIONS}` # strip leading space
78 echo -n "${MY_BRANCH}: Backported r${MY_REV}: " > "${MY_MSG_FILE}"
79 if ! "${MY_SVN}" log "-r${MY_REV}" "${MY_TRUNK_DIR}" > "${MY_TMP_FILE}"; then
80 echo "error: failed to get log entry for revision ${MY_REV}"
81 exit 1;
82 fi
83 if ! "${MY_SED}" -e '1d;2d;3d;$d' --append "${MY_MSG_FILE}" "${MY_TMP_FILE}"; then
84 echo "error: failed to get log entry for revision ${MY_REV} (sed failed)"
85 exit 1;
86 fi
87else
88 # First line.
89 echo -n "${MY_BRANCH}: Backported" > "${MY_MSG_FILE}"
90 MY_COUNTER=0
91 for MY_REV in ${MY_REVISIONS};
92 do
93 if test ${MY_COUNTER} -eq 0; then
94 echo -n " r${MY_REV}" >> "${MY_MSG_FILE}"
95 else
96 echo -n " r${MY_REV}" >> "${MY_MSG_FILE}"
97 fi
98 MY_COUNTER=`"${MY_EXPR}" ${MY_COUNTER} + 1`
99 done
100 echo "." >> "${MY_MSG_FILE}"
101 echo "" >> "${MY_MSG_FILE}"
102
103 # One bullet with the commit text.
104 for MY_REV in ${MY_REVISIONS};
105 do
106 echo -n "* r${MY_REV}: " >> "${MY_MSG_FILE}"
107 if ! "${MY_SVN}" log "-r${MY_REV}" "${MY_TRUNK_DIR}" > "${MY_TMP_FILE}"; then
108 echo "error: failed to get log entry for revision ${MY_REV}"
109 exit 1;
110 fi
111 if ! "${MY_SED}" -e '1d;2d;3d;$d' --append "${MY_MSG_FILE}" "${MY_TMP_FILE}"; then
112 echo "error: failed to get log entry for revision ${MY_REV} (sed failed)"
113 exit 1;
114 fi
115 done
116
117 # This is a line ending hack for windows hosts.
118 if "${MY_SED}" -e 's/1/1/g' --output-text "${MY_TMP_FILE}" "${MY_MSG_FILE}" \
119 && "${MY_SED}" -e 's/1/1/g' --output-text "${MY_MSG_FILE}" "${MY_TMP_FILE}"; then
120 :
121 else
122 echo "error: SED failed to clean up commit message line-endings."
123 exit 1;
124 fi
125fi
126"${MY_RM}" -f -- "${MY_TMP_FILE}"
127
128#
129# Do the committing.
130#
131if [ -n "${MY_SHOW_DIFF}" ]; then
132 echo "***"
133 echo "*** Diff:"
134 "${MY_SVN}" diff --internal-diff
135 echo "*** end diff ***"
136 echo "***"
137 echo ""
138fi
139echo "***"
140echo "*** Commit message:"
141"${MY_CAT}" "${MY_MSG_FILE}"
142echo "*** end commit message ***"
143echo "***"
144IFS=`"${MY_PRINTF}" " \t\r\n"` # windows needs \r for proper 'read' operation.
145for MY_IGNORE in 1 2 3; do
146 read -p "*** Does the above commit message look okay (y/n)?" MY_ANSWER
147 case "${MY_ANSWER}" in
148 y|Y|[yY][eE][sS])
149 if "${MY_SVN}" commit -F "${MY_MSG_FILE}" "${MY_BRANCH_DIR}"; then
150 "${MY_RM}" -f -- "${MY_MSG_FILE}"
151
152 #
153 # Update the branch so we don't end up with mixed revisions.
154 #
155 echo "***"
156 echo "*** Updating branch dir..."
157 "${MY_SVN}" up "${MY_BRANCH_DIR}"
158 exit 0
159 fi
160 echo "error: commit failed" 1>&2
161 exit 1
162 ;;
163 n|N|[nN][oO])
164 exit 1
165 ;;
166 *)
167 echo
168 echo "Please answer 'y' or 'n'... (MY_ANSWER=${MY_ANSWER})"
169 esac
170done
171exit 1;
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette