On Fri, 2019-02-15 at 13:47 -0800, Ira Weiny wrote:
> On Fri, Feb 15, 2019 at 01:01:27PM -0800, 'Vishal Verma' wrote:
> > On Fri, 2019-02-15 at 12:06 -0800, [email protected] wrote:
> > > From: Ira Weiny <[email protected]>
> > >
> > > make-git-snapshot.sh made an assumption of the git tree location.
> > >
> > > Furthermore, it assumed the user has an rpmbuild environment directory
> > > structure set up.
> > >
> > > Enhance the script to figure out where in what location it has been
> > > cloned and setup the rpmbuild tree if the user does not already
> > > have it.
> > >
> > > Signed-off-by: Ira Weiny <[email protected]>
> > >
> > > ---
> > > Changes since V1
> > > use rpmdev-setuptree
> > >
> > > make-git-snapshot.sh | 12 ++++++++++--
> > > 1 file changed, 10 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/make-git-snapshot.sh b/make-git-snapshot.sh
> > > index 142419d623fe..513086b1f93d 100755
> > > --- a/make-git-snapshot.sh
> > > +++ b/make-git-snapshot.sh
> > > @@ -2,10 +2,18 @@
> > > set -e
> > >
> > > NAME=ndctl
> > > -REFDIR="$HOME/git/ndctl" # for faster cloning, if available
> > > +
> > > +pushd `dirname $0`
> > > +REFDIR=`pwd`
> >
> > We should use the $() syntax for command substitution.
> > Also quote it - pushd "$(dirname "$0")"
> > And for setting REFDIR, no need to execute the pwd command - just use
> > the $PWD variable from the environment.
>
> Probably irrelevant with your comments below.
>
> > Additionally, $0 is not a reliable way to get the location of the
> > script. It is probably best to make an assumption that the script will
> > be run from the top level of an ndctl tree, and test for that instead of
> > trying to deduce where the script is being run from and trying to cd to
> > it.
>
> When can $0 not be the name of the script?
For the common case of calling ./script, it is probably fine. But
consider for example:
$ bash < /tmp/test
script was called as bash
Or say if someone decided to symlink it somewhere for convenience:
$ readlink -f /usr/bin/test-symlink && test-symlink
/tmp/test
script was called as /usr/bin/test-symlink
Agreed that in this case those are unlikely, but the point is using $0
for 'locating yourself' is just fragile and should be avoided.
See this for more commentary:
http://mywiki.wooledge.org/BashFAQ/028
>
> > We only really need the git-version script, and if we can test for its
> > presence, then we can relatively safely assume we're in the right
> > location. If it is not a git tree then we can leave it for git-archive
> > to complain. So something like:
> >
> > test -x "./git-version"
>
> Ah ok... Then the stuff above is irrelevant.
>
> And I would prefer something more explicit than just returning.
>
> But the real question is if this is really supposed to be run by a user or
> not.
> If not then your way is better.
>
> diff --git a/make-git-snapshot.sh b/make-git-snapshot.sh
> index 513086b1f93d..fccf1da0d61b 100755
> --- a/make-git-snapshot.sh
> +++ b/make-git-snapshot.sh
> @@ -3,9 +3,12 @@ set -e
>
> NAME=ndctl
>
> -pushd `dirname $0`
> -REFDIR=`pwd`
> -popd
> +if [ ! -x ./git-version ]; then
> + echo "$0 : ERROR: Must run from top level of git tree"
> + exit 1
> +fi
> +
> +REFDIR=$PWD
Yes this looks fine to me.
>
> UPSTREAM=$REFDIR #TODO update once we have a public upstream
> OUTDIR=$HOME/rpmbuild/SOURCES
>
>
> > should suffice.
> >
> > > +popd
> > > +
> > > UPSTREAM=$REFDIR #TODO update once we have a public upstream
> > > OUTDIR=$HOME/rpmbuild/SOURCES
> > >
> > > +if [ ! -d $OUTDIR ]; then
> > > + rpmdev-setuptree
> > > +fi
> > > +
> >
> > There was some discussion around this a while back: [1] and [2]
> >
> > But we had decided that rpmdev-setuptree was heavy handed in that it can
> > overwrite user configuration and we shouldn't use it. Instead in [2], we
> > added a test for the rpmdev tree to exist, and bail if it doesn't.
> >
> > The one improvement I can see to this is:
> >
> > if [ ! -d $OUTDIR ]; then
> > mkdir -p $OUTDIR
> > fi
>
> Dan?
>
> Ira
>
> > That way if components of OUTDIR are missing, we can make those
> > directories only, which is harmless.
> >
> > [1]: https://lists.01.org/pipermail/linux-nvdimm/2017-November/013378.html
> > [2]: https://lists.01.org/pipermail/linux-nvdimm/2017-November/013408.html
> >
> > > [ -n "$1" ] && HEAD="$1" || HEAD="HEAD"
> > >
> > > WORKDIR="$(mktemp -d --tmpdir "$NAME.XXXXXXXXXX")"
> > > @@ -14,7 +22,7 @@ trap 'rm -rf $WORKDIR' exit
> > > [ -d "$REFDIR" ] && REFERENCE="--reference $REFDIR"
> > > git clone $REFERENCE "$UPSTREAM" "$WORKDIR"
> > >
> > > -VERSION=$(./git-version)
> > > +VERSION=$($REFDIR/git-version)
> > > DIRNAME="ndctl-${VERSION}"
> > > git archive --remote="$WORKDIR" --format=tar --prefix="$DIRNAME/" HEAD |
> > > gzip > $OUTDIR/"ndctl-${VERSION}.tar.gz"
> > >
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm