On Wed, Jul 13, 2005 at 09:03:26AM +0200, Matthias Urlichs wrote:

> You are ;-) the tree itsels is no symlinked, but HEAD points to
> refs/heads/<branch> by default.

Thanks for pointing that out.  I honestly never noticed that.

How about the following?

    echo_to_file() {
        local DEST="$2"
        local count=1
        local RET

        # follow symlinks until we run out or end up with something
        # dangling
        while [ -L "$DEST" ] ; do
            local NLINK=`readlink "$DEST"`

            if [ ! -e "$NLINK" ] ; then
                # dangling link, just poke as-is
                echo "$1" > "$DEST"
                return $?
            fi

            # follow link
            if [ -L "$NLINK" ] ; then
                count=$(("$count" + 1))
                if [ "$count" -gt 5 ] ; then
                    echo "Too many symlinks when resolving $2" 1>&2
                    return 1
                fi
                DEST="$NLINK"
            fi
        done

        # end up with a regular file
        local TMPFILE=`mktemp "$DEST.tmp-XXXXXXX"`
        echo "$1" > "$TMPFILE"
        RET="$?"
        mv -f "$TMPFILE" "$DEST"
        return "$RET"
    }


Obvious changes from last time are:

  - mark things local

  - follow links, bailing out if it takes too long

  - if the link is dangling, just use as-is

  - when doing the 'replace' at the end use -f because it's quite
    possible someone will have done cp -Rl ~otheruser/tree here and mv
    *might* bitch if the UID is different?

  - return (some) errors (just because, it's not like cogito checks
    for these)
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to