Changeset e9865a1


Ignore:
Timestamp:
04/28/10 16:28:29 (9 years ago)
Author:
Michał Wróbel <maw@…>
Branches:
master
Children:
73ae6f0
Parents:
a636db9
Message:

new gitpaths approach

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pkgtools/makepkg

    ra636db9 re9865a1  
    306306add_gitpaths()
    307307{
     308        [ -z "$*" ] && error "add_gitpaths requires a parameter"
     309        local pfx top gitpath
     310        pfx=`git rev-parse --show-prefix`
    308311        top=`readlink -f \`git rev-parse --show-toplevel\``
    309         for path in . $*; do
    310                 path=`readlink -f $path`
    311                 path=${path#$top/}
    312                 gitpaths="${gitpaths:+$gitpaths }$path"
     312        for path in $*; do
     313                if [[ $path =~ ^/ ]]; then
     314                        # convert the absolute path to a relative one w.r.t. toplevel directory
     315                        p=${path#/}
     316                        cd /
     317                        while [ -n "$p" ]; do
     318                                dir=${p%%/*}
     319                                p=${p#$dir}
     320                                p=${p#/}
     321                                sofar=${sofar:+$sofar/}$dir
     322                                [ -z $dir ] && continue
     323                                cd $dir || error "Couldn't cd to \"$sofar\" during analysis of gitpath \"$path\"."
     324                                # [ -d .git ] would be sufficent, but let's leave such operations to git
     325                                cwd=`readlink -f \`pwd\``
     326                                [ "$cwd" = "$top" ] && break
     327                        done
     328                        [ -z "$p" ] && error "Couldn't reach topdir \"$top\" during analysis of gitpath \"$path\""
     329                        gitpath="$p"
     330                else
     331                        gitpath="$pfx$path"
     332                fi
     333                gitpaths="${gitpaths:+$gitpaths }$gitpath"
    313334        done
    314335}
     
    319340        savedir=`pwd`
    320341        top=`readlink -f \`git rev-parse --show-toplevel\``
    321         # assert that gitpaths don't contain symlinks or submodules
     342        # assert that gitpaths don't contain symlinks and don't point at files inside submodules
    322343        for path in $gitpaths; do
    323344                cd $top
    324345                p=$path
     346                sofar=""
     347                result=""
    325348                while [ -n "$p" ]; do
    326349                        dir=${p%%/*}
    327350                        p=${p#$dir}
    328351                        p=${p#/}
     352                        sofar=${sofar:+$sofar/}$dir
    329353                        [ -z $dir ] && continue
    330                         [ -L $dir ] && error "`pwd`/$dir is a link encountered during analysis of gitpath \"$path\"."
    331                         cd $dir || error "Couldn't cd to `pwd`/$dir during analysis of gitpath \"$path\"."
     354                        [ -L $dir ] && error "Encountered a symlink \"$sofar\" during analysis of gitpath \"$path\""
     355                        # remember current location w.r.t. top level directory
     356                        cd $dir || error "Couldn't cd to \"$sofar\" during analysis of gitpath \"$path\"."
    332357                        # [ -d .git ] would be sufficent, but let's leave such operations to git
    333                         [ `readlink -f \`git rev-parse --show-toplevel\`` != $top ] && [ -n "$p" ] && \
    334                                 error "gitpath \"$path\" cannot point at a file inside a git submodule"
     358                        if [ "`readlink -f \`git rev-parse --show-toplevel\``" != "$top" ]; then
     359                                # after cd we are in a different repo
     360                                if [ -n "$p" ]; then
     361                                        # and this is not yet the end of the path, so complain
     362                                        error "gitpath \"$path\" cannot point at a file inside a git submodule"
     363                                fi
     364                                cd ..
     365                                result="`git rev-parse --show-prefix`$dir"
     366                                break
     367                        fi
    335368                done
    336                 regexp=${regexp:+$regexp|}$path
     369                if [ -z "$result" ]; then
     370                        result="`git rev-parse --show-prefix`"
     371                        result=${result%/}
     372                fi
     373                if [ -z "$result" ]; then
     374                        warning "due to gitpath \"$path\" this package depends on the whole repository"
     375                        regexp=.
     376                        gps=""
     377                        break
     378                fi
     379                regexp="${regexp:+$regexp|}$result"
     380                gps="${gps:+$gps }$result"
    337381        done
     382        echo "gitpaths: $gps" >&2
    338383        cd $top
    339         pkgver=`git describe --always --match ^pkg-$pkgname \`git log -n1 --format=%H $gitpaths\` | sed -e 's/-/_/g'`
     384        #pkgver=`git describe --always \`git log -n1 --format=%H $gitpaths\` | sed -e 's/-/_/g'`
     385        pkgver=`git log -n1 --format=%H $gps | cut -b1-8`
    340386        dirty=`git diff-index --name-only HEAD | egrep "^($regexp)"`
    341387        if [ $? = 0 ]; then
    342388                pkgrel=dirty
    343                 for path in $dirty; do
    344                         warning "$path is dirty"
    345                 done
     389                for path in $dirty; do warning "$path is dirty"; done
    346390        else
    347391                pkgrel=1
Note: See TracChangeset for help on using the changeset viewer.