summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorDavid Hendricks <dhendrix@google.com>2013-08-14 14:47:26 +0000
committerStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>2013-08-14 14:47:26 +0000
commit36e9f4b3595c6e8b13f80f85785a91b65ecad62f (patch)
treed2f6b83838634e65348c92c248cf63a8891bc972 /util
parent241e9d5e44d0885213b4456b1b684e1e746b6957 (diff)
downloadast2050-flashrom-36e9f4b3595c6e8b13f80f85785a91b65ecad62f.zip
ast2050-flashrom-36e9f4b3595c6e8b13f80f85785a91b65ecad62f.tar.gz
Add getrevision.sh utility script
This allows to retrieve various data from SCM systems (git and svn) and use them in the build process to better indicate which source was used. For now only use it for the upstream (i.e. svn) revision number, which was previously implemented by an awful line in the Makefile. Corresponding to flashrom svn r1713. Signed-off-by: David Hendricks <dhendrix@google.com> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Diffstat (limited to 'util')
-rwxr-xr-xutil/getrevision.sh228
1 files changed, 228 insertions, 0 deletions
diff --git a/util/getrevision.sh b/util/getrevision.sh
new file mode 100755
index 0000000..678d66b
--- /dev/null
+++ b/util/getrevision.sh
@@ -0,0 +1,228 @@
+#!/bin/sh
+#
+# This file is part of the flashrom project.
+#
+# Copyright (C) 2005 coresystems GmbH <stepan@coresystems.de>
+# Copyright (C) 2009,2010 Carl-Daniel Hailfinger
+# Copyright (C) 2010 Chromium OS Authors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+svn_revision() {
+ LC_ALL=C svnversion -cn . 2>/dev/null | \
+ sed -e "s/.*://" -e "s/\([0-9]*\).*/\1/" | \
+ grep "[0-9]" ||
+ LC_ALL=C svn info . 2>/dev/null | \
+ awk '/^Revision:/ {print $$2 }' | \
+ grep "[0-9]" ||
+ LC_ALL=C git svn info . 2>/dev/null | \
+ awk '/^Revision:/ {print $$2 }' | \
+ grep "[0-9]" ||
+ echo ''
+}
+
+svn_url() {
+ echo $(LC_ALL=C svn info 2>/dev/null |
+ grep URL: |
+ sed 's/.*URL:[[:blank:]]*//' |
+ grep ^.
+ )
+}
+
+svn_timestamp() {
+ local date_format="+%Y-%m-%d %H:%M:%S"
+ local timestamp
+
+ # are there local changes in the client?
+ if svn status | egrep '^ *[ADMR] *' > /dev/null ; then
+ timestamp=$(date "${date_format} +")
+ else
+ # No local changes, get date of the last log record.
+ local last_commit_date=$(svn info | grep '^Last Changed Date:' | \
+ awk '{print $4" "$5" "$6}')
+ timestamp=$(date --utc --date "${last_commit_date}" \
+ "${date_format} UTC")
+ fi
+
+ echo "${timestamp}"
+}
+
+git_revision() {
+ echo $(git log --oneline | head -1 | awk '{print $1}')
+}
+
+# Retrieve svn revision using git log data (for git mirrors)
+gitsvn_revision() {
+ local r
+
+ git log|
+ grep git-svn-id|
+ sed 's/.*git-svn-id:[[:blank:]]*\([^@]\+\)@[0-9]\+[[:blank:]]\+\([^[:blank:]]\+\)/\1 \2/'|
+ sort|
+ uniq|
+ read url uuid
+
+ r=$(git log --grep="git-svn-id.*$uuid"| grep git-svn-id | \
+ sed 's/.*@//;s/[[:blank:]].*//'| \
+ sort -n | \
+ tail -1)
+
+ echo "${r}"
+}
+
+git_timestamp() {
+ local date_format="+%b %d %Y %H:%M:%S"
+ local timestamp
+
+ # are there local changes in the client?
+ if git status | \
+ egrep '^# Change(s to be committed|d but not updated):$' > /dev/null
+ then
+ timestamp=$(date "${date_format} +")
+ else
+ # No local changes, get date of the last log record.
+ local last_commit_date=$(git log | head -3 | grep '^Date:' | \
+ awk '{print $3" "$4" "$6" "$5" "$7}')
+ timestamp=$(date --utc --date "${last_commit_date}" \
+ "${date_format} UTC")
+ fi
+
+ echo "${timestamp}"
+}
+
+git_url() {
+ # Only the first line of `git remote' is considered.
+ echo $(LC_ALL=C git remote show origin 2>/dev/null |
+ grep 'Fetch URL:' |
+ sed 's/.*URL:[[:blank:]]*//' |
+ grep ^.
+ )
+}
+
+scm_url() {
+ local url
+
+ if [ -d ".svn" ] ; then
+ url=$(svn_url)
+ elif [ -d ".git" ] ; then
+ url=$(git_url)
+ fi
+
+ echo "${url}"
+}
+
+# Retrieve timestamp since last modification. If the sources are pristine,
+# then the timestamp will match that of the SCM's more recent modification
+# date.
+timestamp() {
+ local t
+
+ if [ -d ".svn" ] ; then
+ t=$(svn_timestamp)
+ elif [ -d ".git" ] ; then
+ t=$(git_timestamp)
+ fi
+
+ echo ${t}
+}
+
+# Retrieve local SCM revision info. This is useful if we're working in
+# a even different SCM than upstream.
+#
+# If local copy is svn, then there is nothing to do here.
+# If local copy is git, then retrieve useful git revision info
+local_revision() {
+ local r
+
+ if [ -d ".git" ] ; then
+ r=$(git_revision)
+ fi
+
+ echo ${r}
+}
+
+# Get the upstream flashrom revision stored in SVN metadata.
+#
+# If the local copy is svn, then use svnversion
+# If the local copy is git, then scrape upstream revision from git logs
+upstream_revision() {
+ local r
+
+ if [ -d ".svn" ] ; then
+ r=$(svn_revision)
+ elif [ -d ".git" ] ; then
+ r=$(gitsvn_revision)
+ fi
+
+ echo "${r}"
+}
+
+show_help() {
+ echo "Usage:
+ ${0} <option>
+
+Options
+ -h or --help
+ Display this message.
+ -u or --upstream
+ upstream flashrom revision
+ -l or --local
+ local revision (if different from upstream)
+ -t or --timestamp
+ timestamp of most recent modification
+ -U or --url
+ url associated with local copy of flashrom
+ "
+ return
+}
+
+if [ ! -n "${1}" ]
+then
+ show_help;
+ echo "No options specified";
+ exit ${EXIT_SUCCESS}
+fi
+
+# The is the main loop
+while [[ ${1} = -* ]];
+do
+ case ${1} in
+ -h|--help)
+ show_help;
+ shift;;
+ -u|--upstream)
+ echo "$(upstream_revision)";
+ shift;;
+ -l|--local)
+ echo "$(local_revision)";
+ shift;;
+ -t|--timestamp)
+ echo "$(timestamp)";
+ shift;;
+ -U|--url)
+ echo "$(scm_url)";
+ shift;;
+ *)
+ show_help;
+ echo "invalid option: ${1}"
+ exit ${EXIT_FAILURE}
+ esac;
+done
+
+exit ${EXIT_SUCCESS}
OpenPOWER on IntegriCloud