summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
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