On Fri, 20 Sep 2013 09:54:57 -0700 (PDT)
Gabriel Marchesan Almeida <gabrielmarche...@gmail.com> wrote:

> Konstantin, me again.
> I have realized that when running your commands directly on prompt
> command, they work pretty fine and I have an output on /tmp/valid,
> which is exactly the TAG i want to keep.
> However when putting the command in a bash script, I have always
> empty /tmp/valid.
> I am having problems to figure out where the problem is coming from.

A couple of points:

First, remove the subshell (...) which is in front of | sort -u ...
as it's not really needed -- a simple pipeline would do just fine:

git rev-list --branches |
while read c; do git tag --contains $c; done |
sort -u >/tmp/valid

Next, just verify every part of the pipeline works as intended,
that is:

1) Place a call

   git rev-list --branches

   before the pipeline and see if it prints a set of SHA-1 names.

2) Place a call to `git tag --list` before the pipeline to verify the
   tags are there.

3) Replace `git tag --contains $c` in the `while` body with mere
   `echo $c` and see if that works.

Next, it's almost always advisable to run the script with the "fail on
errors" and "fail on undefined variables" flags turned on, which is
done by executing

set -e -u

in the script.  This helps detect subtle errors.

Next, while `set -e -u` is usually a must, this does not prevent faulty
pipelines from failing (a really brain-dead property of the standard
Unix shell).  If (and only if) you're using bash, make it fail on
faulty pipelines by running `set -o pipefail` and hence the recommended
thing to include in the script is

set -e -u -o pipefail

This way bash will die with an error message as soon as any program it
calls anywhere exits with a non-error exit code.

Last, in scripts, never hard-code names of temporary files -- use
mktemp instead:

FNAME=`mktemp git.XXXXXXXX`
trap 'rm -rf "$FNAME"' TERM INT EXIT

... sort -u >"$FNAME"
... grep -f "$FNAME"

> Small area of my script.
> http://screenpresso.com/=zAske

Next time please use a pastebin service [1] like, uh, pastebin.com,
or https://gist.github.com/ and so on -- they're in abundance.
There's no need to use graphics to present text.

1. http://en.wikipedia.org/wiki/Pastebin

You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to