Message ID | 20191011021759.28960-1-unixbhaskar@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Modern Bash syntax, replace backquote to dollar parenthesis | expand |
On 10/10/19 7:17 PM, Bhaskar Chowdhury wrote: > Signed-off-by: Bhaskar Chowdhury <unixbhaskar@gmail.com> > --- > setlocalversion | 183 ++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 183 insertions(+) > create mode 100755 setlocalversion Hi, I'm pretty sure something is mucked up here. > diff --git a/setlocalversion b/setlocalversion but this isn't a diff between those 2 files. And this diff should be from the top level of the kernel source tree, so it should be a diff between a/scripts/setlocalversion and b/scripts/setlocalversion. > new file mode 100755 There is already a file scripts/setlocalversion, so this "new file" is strange. Also, the patch subject should be something like: [PATCH] scripts: fix shell syntax And note that the shell in this case is /bin/sh, not necessarily bash. Actually we prefer to make patches that remove bashisms in many cases. One more: you should Cc: the kbuild maintainer on patches that he might apply/merge. Thanks. > index 000000000000..220dae0db3f1 > --- /dev/null > +++ b/setlocalversion > @@ -0,0 +1,183 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > +# > +# This scripts adds local version information from the version > +# control systems git, mercurial (hg) and subversion (svn). > +# > +# If something goes wrong, send a mail the kernel build mailinglist > +# (see MAINTAINERS) and CC Nico Schottelius > +# <nico-linuxsetlocalversion -at- schottelius.org>. > +# > +# > + > +usage() { > + echo "Usage: $0 [--save-scmversion] [srctree]" >&2 > + exit 1 > +} > + > +scm_only=false > +srctree=. > +if test "$1" = "--save-scmversion"; then > + scm_only=true > + shift > +fi > +if test $# -gt 0; then > + srctree=$1 > + shift > +fi > +if test $# -gt 0 -o ! -d "$srctree"; then > + usage > +fi > + > +scm_version() > +{ > + local short > + short=false > + > + cd "$srctree" > + if test -e .scmversion; then > + cat .scmversion > + return > + fi > + if test "$1" = "--short"; then > + short=true > + fi > + > + # Check for git and a git repo. > + if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && > + head=`git rev-parse --verify --short HEAD 2>/dev/null`; then > + > + # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore > + # it, because this version is defined in the top level Makefile. > + if [ -z "`git describe --exact-match 2>/dev/null`" ]; then > + > + # If only the short version is requested, don't bother > + # running further git commands > + if $short; then > + echo "+" > + return > + fi > + # If we are past a tagged commit (like > + # "v2.6.30-rc5-302-g72357d5"), we pretty print it. > + if atag="`git describe 2>/dev/null`"; then > + echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' > + > + # If we don't have a tag at all we print -g{commitish}. > + else > + printf '%s%s' -g $head > + fi > + fi > + > + # Is this git on svn? > + if git config --get svn-remote.svn.url >/dev/null; then > + printf -- '-svn%s' "`git svn find-rev $head`" > + fi > + > + # Check for uncommitted changes. > + # First, with git-status, but --no-optional-locks is only > + # supported in git >= 2.14, so fall back to git-diff-index if > + # it fails. Note that git-diff-index does not refresh the > + # index, so it may give misleading results. See > + # git-update-index(1), git-diff-index(1), and git-status(1). > + if { > + git --no-optional-locks status -uno --porcelain 2>/dev/null || > + git diff-index --name-only HEAD > + } | grep -qvE '^(.. )?scripts/package'; then > + printf '%s' -dirty > + fi > + > + # All done with git > + return > + fi > + > + # Check for mercurial and a mercurial repo. > + if test -d .hg && hgid=`hg id 2>/dev/null`; then > + # Do we have an tagged version? If so, latesttagdistance == 1 > + if [ "`hg log -r . --template '{latesttagdistance}'`" == "1" ]; then > + id=`hg log -r . --template '{latesttag}'` > + printf '%s%s' -hg "$id" > + else > + tag=`printf '%s' "$hgid" | cut -d' ' -f2` > + if [ -z "$tag" -o "$tag" = tip ]; then > + id=`printf '%s' "$hgid" | sed 's/[+ ].*//'` > + printf '%s%s' -hg "$id" > + fi > + fi > + > + # Are there uncommitted changes? > + # These are represented by + after the changeset id. > + case "$hgid" in > + *+|*+\ *) printf '%s' -dirty ;; > + esac > + > + # All done with mercurial > + return > + fi > + > + # Check for svn and a svn repo. > + if rev=`LANG= LC_ALL= LC_MESSAGES=C svn info 2>/dev/null | grep '^Last Changed Rev'`; then > + rev=`echo $rev | awk '{print $NF}'` > + printf -- '-svn%s' "$rev" > + > + # All done with svn > + return > + fi > +} > + > +collect_files() > +{ > + local file res= > + > + for file; do > + case "$file" in > + *\~*) > + continue > + ;; > + esac > + if test -e "$file"; then > + res="$res$(cat "$file")" > + fi > + done > + echo "$res" > +} > + > +if $scm_only; then > + if test ! -e .scmversion; then > + res=$(scm_version) > + echo "$res" >.scmversion > + fi > + exit > +fi > + > +if test -e include/config/auto.conf; then > + . include/config/auto.conf > +else > + echo "Error: kernelrelease not valid - run 'make prepare' to update it" >&2 > + exit 1 > +fi > + > +# localversion* files in the build and source directory > +res="$(collect_files localversion*)" > +if test ! "$srctree" -ef .; then > + res="$res$(collect_files "$srctree"/localversion*)" > +fi > + > +# CONFIG_LOCALVERSION and LOCALVERSION (if set) > +res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}" > + > +# scm version string if not at a tagged commit > +if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then > + # full scm version string > + res="$res$(scm_version)" > +else > + # append a plus sign if the repository is not in a clean > + # annotated or signed tagged state (as git describe only > + # looks at signed or annotated tags - git tag -a/-s) and > + # LOCALVERSION= is not specified > + if test "${LOCALVERSION+set}" != "set"; then > + scm=$(scm_version --short) > + res="$res${scm:++}" > + fi > +fi > + > +echo "$res" >
On 20:04 Thu 10 Oct 2019, Randy Dunlap wrote: >On 10/10/19 7:17 PM, Bhaskar Chowdhury wrote: >> Signed-off-by: Bhaskar Chowdhury <unixbhaskar@gmail.com> >> --- >> setlocalversion | 183 ++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 183 insertions(+) >> create mode 100755 setlocalversion > >Hi, >I'm pretty sure something is mucked up here. > >> diff --git a/setlocalversion b/setlocalversion > >but this isn't a diff between those 2 files. > >And this diff should be from the top level of the kernel source tree, so it >should be a diff between a/scripts/setlocalversion and b/scripts/setlocalversion. > Right. I have move the original file to top level dir then ... >> new file mode 100755 > >There is already a file scripts/setlocalversion, so this "new file" is strange. > It is indeed..because of my stupidity ..as I said removed that file and made the patch...heck >Also, the patch subject should be something like: >[PATCH] scripts: fix shell syntax > Doesn't the subject catch it from commit message?? >And note that the shell in this case is /bin/sh, not necessarily bash. >Actually we prefer to make patches that remove bashisms in many cases. > Do you want me drop this one ? Can you be specific Randy, please, if it is not what is need , no point wasting time on it. >One more: you should Cc: the kbuild maintainer on patches that he might apply/merge. > I did , I believe ..both the maintainers . >Thanks. > >> index 000000000000..220dae0db3f1 >> --- /dev/null >> +++ b/setlocalversion >> @@ -0,0 +1,183 @@ >> +#!/bin/sh >> +# SPDX-License-Identifier: GPL-2.0 >> +# >> +# This scripts adds local version information from the version >> +# control systems git, mercurial (hg) and subversion (svn). >> +# >> +# If something goes wrong, send a mail the kernel build mailinglist >> +# (see MAINTAINERS) and CC Nico Schottelius >> +# <nico-linuxsetlocalversion -at- schottelius.org>. >> +# >> +# >> + >> +usage() { >> + echo "Usage: $0 [--save-scmversion] [srctree]" >&2 >> + exit 1 >> +} >> + >> +scm_only=false >> +srctree=. >> +if test "$1" = "--save-scmversion"; then >> + scm_only=true >> + shift >> +fi >> +if test $# -gt 0; then >> + srctree=$1 >> + shift >> +fi >> +if test $# -gt 0 -o ! -d "$srctree"; then >> + usage >> +fi >> + >> +scm_version() >> +{ >> + local short >> + short=false >> + >> + cd "$srctree" >> + if test -e .scmversion; then >> + cat .scmversion >> + return >> + fi >> + if test "$1" = "--short"; then >> + short=true >> + fi >> + >> + # Check for git and a git repo. >> + if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && >> + head=`git rev-parse --verify --short HEAD 2>/dev/null`; then >> + >> + # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore >> + # it, because this version is defined in the top level Makefile. >> + if [ -z "`git describe --exact-match 2>/dev/null`" ]; then >> + >> + # If only the short version is requested, don't bother >> + # running further git commands >> + if $short; then >> + echo "+" >> + return >> + fi >> + # If we are past a tagged commit (like >> + # "v2.6.30-rc5-302-g72357d5"), we pretty print it. >> + if atag="`git describe 2>/dev/null`"; then >> + echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' >> + >> + # If we don't have a tag at all we print -g{commitish}. >> + else >> + printf '%s%s' -g $head >> + fi >> + fi >> + >> + # Is this git on svn? >> + if git config --get svn-remote.svn.url >/dev/null; then >> + printf -- '-svn%s' "`git svn find-rev $head`" >> + fi >> + >> + # Check for uncommitted changes. >> + # First, with git-status, but --no-optional-locks is only >> + # supported in git >= 2.14, so fall back to git-diff-index if >> + # it fails. Note that git-diff-index does not refresh the >> + # index, so it may give misleading results. See >> + # git-update-index(1), git-diff-index(1), and git-status(1). >> + if { >> + git --no-optional-locks status -uno --porcelain 2>/dev/null || >> + git diff-index --name-only HEAD >> + } | grep -qvE '^(.. )?scripts/package'; then >> + printf '%s' -dirty >> + fi >> + >> + # All done with git >> + return >> + fi >> + >> + # Check for mercurial and a mercurial repo. >> + if test -d .hg && hgid=`hg id 2>/dev/null`; then >> + # Do we have an tagged version? If so, latesttagdistance == 1 >> + if [ "`hg log -r . --template '{latesttagdistance}'`" == "1" ]; then >> + id=`hg log -r . --template '{latesttag}'` >> + printf '%s%s' -hg "$id" >> + else >> + tag=`printf '%s' "$hgid" | cut -d' ' -f2` >> + if [ -z "$tag" -o "$tag" = tip ]; then >> + id=`printf '%s' "$hgid" | sed 's/[+ ].*//'` >> + printf '%s%s' -hg "$id" >> + fi >> + fi >> + >> + # Are there uncommitted changes? >> + # These are represented by + after the changeset id. >> + case "$hgid" in >> + *+|*+\ *) printf '%s' -dirty ;; >> + esac >> + >> + # All done with mercurial >> + return >> + fi >> + >> + # Check for svn and a svn repo. >> + if rev=`LANG= LC_ALL= LC_MESSAGES=C svn info 2>/dev/null | grep '^Last Changed Rev'`; then >> + rev=`echo $rev | awk '{print $NF}'` >> + printf -- '-svn%s' "$rev" >> + >> + # All done with svn >> + return >> + fi >> +} >> + >> +collect_files() >> +{ >> + local file res= >> + >> + for file; do >> + case "$file" in >> + *\~*) >> + continue >> + ;; >> + esac >> + if test -e "$file"; then >> + res="$res$(cat "$file")" >> + fi >> + done >> + echo "$res" >> +} >> + >> +if $scm_only; then >> + if test ! -e .scmversion; then >> + res=$(scm_version) >> + echo "$res" >.scmversion >> + fi >> + exit >> +fi >> + >> +if test -e include/config/auto.conf; then >> + . include/config/auto.conf >> +else >> + echo "Error: kernelrelease not valid - run 'make prepare' to update it" >&2 >> + exit 1 >> +fi >> + >> +# localversion* files in the build and source directory >> +res="$(collect_files localversion*)" >> +if test ! "$srctree" -ef .; then >> + res="$res$(collect_files "$srctree"/localversion*)" >> +fi >> + >> +# CONFIG_LOCALVERSION and LOCALVERSION (if set) >> +res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}" >> + >> +# scm version string if not at a tagged commit >> +if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then >> + # full scm version string >> + res="$res$(scm_version)" >> +else >> + # append a plus sign if the repository is not in a clean >> + # annotated or signed tagged state (as git describe only >> + # looks at signed or annotated tags - git tag -a/-s) and >> + # LOCALVERSION= is not specified >> + if test "${LOCALVERSION+set}" != "set"; then >> + scm=$(scm_version --short) >> + res="$res${scm:++}" >> + fi >> +fi >> + >> +echo "$res" >> > > >-- >~Randy
On 10/10/19 9:28 PM, Bhaskar Chowdhury wrote: > On 20:04 Thu 10 Oct 2019, Randy Dunlap wrote: >> On 10/10/19 7:17 PM, Bhaskar Chowdhury wrote: >>> Signed-off-by: Bhaskar Chowdhury <unixbhaskar@gmail.com> >>> --- >>> setlocalversion | 183 ++++++++++++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 183 insertions(+) >>> create mode 100755 setlocalversion >> >> Hi, >> I'm pretty sure something is mucked up here. >> >>> diff --git a/setlocalversion b/setlocalversion >> >> but this isn't a diff between those 2 files. >> >> And this diff should be from the top level of the kernel source tree, so it >> should be a diff between a/scripts/setlocalversion and b/scripts/setlocalversion. >> > Right. I have move the original file to top level dir then ... >>> new file mode 100755 >> >> There is already a file scripts/setlocalversion, so this "new file" is strange. >> > It is indeed..because of my stupidity ..as I said removed that file and > made the patch...heck > >> Also, the patch subject should be something like: >> [PATCH] scripts: fix shell syntax >> > Doesn't the subject catch it from commit message?? I don't quite follow that, but anyway my answer is No. >> And note that the shell in this case is /bin/sh, not necessarily bash. >> Actually we prefer to make patches that remove bashisms in many cases. >> > Do you want me drop this one ? Can you be specific Randy, please, if it > is not what is need , no point wasting time on it. Sorry, I can't tell without seeing the actual changes in a corrected patch/diff. >> One more: you should Cc: the kbuild maintainer on patches that he might apply/merge. >> > > I did , I believe ..both the maintainers . Nope. Only the linux-kbuild mailing list, no maintainers that I can see.
diff --git a/setlocalversion b/setlocalversion new file mode 100755 index 000000000000..220dae0db3f1 --- /dev/null +++ b/setlocalversion @@ -0,0 +1,183 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# This scripts adds local version information from the version +# control systems git, mercurial (hg) and subversion (svn). +# +# If something goes wrong, send a mail the kernel build mailinglist +# (see MAINTAINERS) and CC Nico Schottelius +# <nico-linuxsetlocalversion -at- schottelius.org>. +# +# + +usage() { + echo "Usage: $0 [--save-scmversion] [srctree]" >&2 + exit 1 +} + +scm_only=false +srctree=. +if test "$1" = "--save-scmversion"; then + scm_only=true + shift +fi +if test $# -gt 0; then + srctree=$1 + shift +fi +if test $# -gt 0 -o ! -d "$srctree"; then + usage +fi + +scm_version() +{ + local short + short=false + + cd "$srctree" + if test -e .scmversion; then + cat .scmversion + return + fi + if test "$1" = "--short"; then + short=true + fi + + # Check for git and a git repo. + if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && + head=`git rev-parse --verify --short HEAD 2>/dev/null`; then + + # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore + # it, because this version is defined in the top level Makefile. + if [ -z "`git describe --exact-match 2>/dev/null`" ]; then + + # If only the short version is requested, don't bother + # running further git commands + if $short; then + echo "+" + return + fi + # If we are past a tagged commit (like + # "v2.6.30-rc5-302-g72357d5"), we pretty print it. + if atag="`git describe 2>/dev/null`"; then + echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' + + # If we don't have a tag at all we print -g{commitish}. + else + printf '%s%s' -g $head + fi + fi + + # Is this git on svn? + if git config --get svn-remote.svn.url >/dev/null; then + printf -- '-svn%s' "`git svn find-rev $head`" + fi + + # Check for uncommitted changes. + # First, with git-status, but --no-optional-locks is only + # supported in git >= 2.14, so fall back to git-diff-index if + # it fails. Note that git-diff-index does not refresh the + # index, so it may give misleading results. See + # git-update-index(1), git-diff-index(1), and git-status(1). + if { + git --no-optional-locks status -uno --porcelain 2>/dev/null || + git diff-index --name-only HEAD + } | grep -qvE '^(.. )?scripts/package'; then + printf '%s' -dirty + fi + + # All done with git + return + fi + + # Check for mercurial and a mercurial repo. + if test -d .hg && hgid=`hg id 2>/dev/null`; then + # Do we have an tagged version? If so, latesttagdistance == 1 + if [ "`hg log -r . --template '{latesttagdistance}'`" == "1" ]; then + id=`hg log -r . --template '{latesttag}'` + printf '%s%s' -hg "$id" + else + tag=`printf '%s' "$hgid" | cut -d' ' -f2` + if [ -z "$tag" -o "$tag" = tip ]; then + id=`printf '%s' "$hgid" | sed 's/[+ ].*//'` + printf '%s%s' -hg "$id" + fi + fi + + # Are there uncommitted changes? + # These are represented by + after the changeset id. + case "$hgid" in + *+|*+\ *) printf '%s' -dirty ;; + esac + + # All done with mercurial + return + fi + + # Check for svn and a svn repo. + if rev=`LANG= LC_ALL= LC_MESSAGES=C svn info 2>/dev/null | grep '^Last Changed Rev'`; then + rev=`echo $rev | awk '{print $NF}'` + printf -- '-svn%s' "$rev" + + # All done with svn + return + fi +} + +collect_files() +{ + local file res= + + for file; do + case "$file" in + *\~*) + continue + ;; + esac + if test -e "$file"; then + res="$res$(cat "$file")" + fi + done + echo "$res" +} + +if $scm_only; then + if test ! -e .scmversion; then + res=$(scm_version) + echo "$res" >.scmversion + fi + exit +fi + +if test -e include/config/auto.conf; then + . include/config/auto.conf +else + echo "Error: kernelrelease not valid - run 'make prepare' to update it" >&2 + exit 1 +fi + +# localversion* files in the build and source directory +res="$(collect_files localversion*)" +if test ! "$srctree" -ef .; then + res="$res$(collect_files "$srctree"/localversion*)" +fi + +# CONFIG_LOCALVERSION and LOCALVERSION (if set) +res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}" + +# scm version string if not at a tagged commit +if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then + # full scm version string + res="$res$(scm_version)" +else + # append a plus sign if the repository is not in a clean + # annotated or signed tagged state (as git describe only + # looks at signed or annotated tags - git tag -a/-s) and + # LOCALVERSION= is not specified + if test "${LOCALVERSION+set}" != "set"; then + scm=$(scm_version --short) + res="$res${scm:++}" + fi +fi + +echo "$res"
Signed-off-by: Bhaskar Chowdhury <unixbhaskar@gmail.com> --- setlocalversion | 183 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100755 setlocalversion