setlocalversion (fc8e1ead9314cf0e0f1922e661428b93d3a50d88) | setlocalversion (09155120cf0ffe6f0c8aba3aa625831405b65996) |
---|---|
1#!/bin/sh 2# 3# This scripts adds local version information from the version 4# control systems git, mercurial (hg) and subversion (svn). 5# 6# If something goes wrong, send a mail the kernel build mailinglist 7# (see MAINTAINERS) and CC Nico Schottelius 8# <nico-linuxsetlocalversion -at- schottelius.org>. 9# 10# 11 12usage() { | 1#!/bin/sh 2# 3# This scripts adds local version information from the version 4# control systems git, mercurial (hg) and subversion (svn). 5# 6# If something goes wrong, send a mail the kernel build mailinglist 7# (see MAINTAINERS) and CC Nico Schottelius 8# <nico-linuxsetlocalversion -at- schottelius.org>. 9# 10# 11 12usage() { |
13 echo "Usage: $0 [srctree]" >&2 | 13 echo "Usage: $0 [--scm-only] [srctree]" >&2 |
14 exit 1 15} 16 | 14 exit 1 15} 16 |
17cd "${1:-.}" || usage | 17scm_only=false 18srctree=. 19if test "$1" = "--scm-only"; then 20 scm_only=true 21 shift 22fi 23if test $# -gt 0; then 24 srctree=$1 25 shift 26fi 27if test $# -gt 0 -o ! -d "$srctree"; then 28 usage 29fi |
18 | 30 |
19# Check for git and a git repo. 20if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then | 31scm_version() 32{ 33 local short=false |
21 | 34 |
22 # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore it, 23 # because this version is defined in the top level Makefile. 24 if [ -z "`git describe --exact-match 2>/dev/null`" ]; then | 35 cd "$srctree" 36 if test -e .scmversion; then 37 cat "$_" 38 return 39 fi 40 if test "$1" = "--short"; then 41 short=true 42 fi |
25 | 43 |
26 # If we are past a tagged commit (like "v2.6.30-rc5-302-g72357d5"), 27 # we pretty print it. 28 if atag="`git describe 2>/dev/null`"; then 29 echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' | 44 # Check for git and a git repo. 45 if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then |
30 | 46 |
31 # If we don't have a tag at all we print -g{commitish}. 32 else 33 printf '%s%s' -g $head | 47 # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore 48 # it, because this version is defined in the top level Makefile. 49 if [ -z "`git describe --exact-match 2>/dev/null`" ]; then 50 51 # If only the short version is requested, don't bother 52 # running further git commands 53 if $short; then 54 echo "+" 55 return 56 fi 57 # If we are past a tagged commit (like 58 # "v2.6.30-rc5-302-g72357d5"), we pretty print it. 59 if atag="`git describe 2>/dev/null`"; then 60 echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' 61 62 # If we don't have a tag at all we print -g{commitish}. 63 else 64 printf '%s%s' -g $head 65 fi |
34 fi | 66 fi |
35 fi | |
36 | 67 |
37 # Is this git on svn? 38 if git config --get svn-remote.svn.url >/dev/null; then 39 printf -- '-svn%s' "`git svn find-rev $head`" 40 fi | 68 # Is this git on svn? 69 if git config --get svn-remote.svn.url >/dev/null; then 70 printf -- '-svn%s' "`git svn find-rev $head`" 71 fi |
41 | 72 |
42 # Update index only on r/w media 43 [ -w . ] && git update-index --refresh --unmerged > /dev/null | 73 # Update index only on r/w media 74 [ -w . ] && git update-index --refresh --unmerged > /dev/null |
44 | 75 |
45 # Check for uncommitted changes 46 if git diff-index --name-only HEAD | grep -v "^scripts/package" \ 47 | read dummy; then 48 printf '%s' -dirty | 76 # Check for uncommitted changes 77 if git diff-index --name-only HEAD | grep -v "^scripts/package" \ 78 | read dummy; then 79 printf '%s' -dirty 80 fi 81 82 # All done with git 83 return |
49 fi 50 | 84 fi 85 |
51 # All done with git 52 exit 53fi | 86 # Check for mercurial and a mercurial repo. 87 if hgid=`hg id 2>/dev/null`; then 88 tag=`printf '%s' "$hgid" | cut -d' ' -f2` |
54 | 89 |
55# Check for mercurial and a mercurial repo. 56if hgid=`hg id 2>/dev/null`; then 57 tag=`printf '%s' "$hgid" | cut -d' ' -f2` | 90 # Do we have an untagged version? 91 if [ -z "$tag" -o "$tag" = tip ]; then 92 id=`printf '%s' "$hgid" | sed 's/[+ ].*//'` 93 printf '%s%s' -hg "$id" 94 fi |
58 | 95 |
59 # Do we have an untagged version? 60 if [ -z "$tag" -o "$tag" = tip ]; then 61 id=`printf '%s' "$hgid" | sed 's/[+ ].*//'` 62 printf '%s%s' -hg "$id" | 96 # Are there uncommitted changes? 97 # These are represented by + after the changeset id. 98 case "$hgid" in 99 *+|*+\ *) printf '%s' -dirty ;; 100 esac 101 102 # All done with mercurial 103 return |
63 fi 64 | 104 fi 105 |
65 # Are there uncommitted changes? 66 # These are represented by + after the changeset id. 67 case "$hgid" in 68 *+|*+\ *) printf '%s' -dirty ;; 69 esac | 106 # Check for svn and a svn repo. 107 if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then 108 rev=`echo $rev | awk '{print $NF}'` 109 printf -- '-svn%s' "$rev" |
70 | 110 |
71 # All done with mercurial | 111 # All done with svn 112 return 113 fi 114} 115 116collect_files() 117{ 118 local file res 119 120 for file; do 121 case "$file" in 122 *\~*) 123 continue 124 ;; 125 esac 126 if test -e "$file"; then 127 res="$res$(cat "$file")" 128 fi 129 done 130 echo "$res" 131} 132 133if $scm_only; then 134 scm_version |
72 exit 73fi 74 | 135 exit 136fi 137 |
75# Check for svn and a svn repo. 76if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then 77 rev=`echo $rev | awk '{print $NF}'` 78 printf -- '-svn%s' "$rev" | 138if test -e include/config/auto.conf; then 139 source "$_" 140else 141 echo "Error: kernelrelease not valid - run 'make prepare' to update it" 142 exit 1 143fi |
79 | 144 |
80 # All done with svn 81 exit | 145# localversion* files in the build and source directory 146res="$(collect_files localversion*)" 147if test ! "$srctree" -ef .; then 148 res="$res$(collect_files "$srctree"/localversion*)" |
82fi | 149fi |
150 151# CONFIG_LOCALVERSION and LOCALVERSION (if set) 152res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}" 153 154# scm version string if not at a tagged commit 155if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then 156 # full scm version string 157 res="$res$(scm_version)" 158else 159 # apped a plus sign if the repository is not in a clean tagged 160 # state and LOCALVERSION= is not specified 161 if test "${LOCALVERSION+set}" != "set"; then 162 scm=$(scm_version --short) 163 res="$res${scm:++}" 164 fi 165fi 166 167echo "$res" |
|