[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Changeset / commit id not incorporated in build after switch to git



Hello Sander,

Monday, February 25, 2013, 11:28:53 PM, you wrote:

> Date: Mon, 25 Feb 2013 23:28:53 +0100
> From: Sander Eikelenboom <linux@xxxxxxxxxxxxxx>
> Organization: Eikelenboom IT services
> X-Priority: 3 (Normal)
> Message-ID: <1208255021.20130225232853@xxxxxxxxxxxxxx>
> To: xen-devel <xen-devel@xxxxxxxxxxxxx>
> Subject: Changeset / commit id not incorporated in build after switch to git
> MIME-Version: 1.0
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit

> Hi All,

> After the switching from mercurial to git, the changeset isn't incorporated 
> anymore in the build.
> This makes error reports possibly a bit less verbose (xl dmesg, serial logs 
> and xl info now omit the changeset (or commit) info)

> Git doesn't have the concept of changesets afaik and mercurial is, while 
> deprecated, still used as mirror.

> So what would be wise:
>    - just replace the changeset with the git commit sha-1 hash (always)
>    - use changeset when a mercurial tree is detected or the last git commit 
> sha-1 (and date ?) when a git tree is detected
>    - make a separate "commit" entry besides the changeset and leave one 
> undefined

> xen/Makefile currently has:

> # compile.h contains dynamic build info. Rebuilt on every 'make' invocation.
> include/xen/compile.h: include/xen/compile.h.in .banner
>         @sed -e 's/@@date@@/$(shell LC_ALL=C date)/g' \
>             -e 's/@@time@@/$(shell LC_ALL=C date +%T)/g' \
>             -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
>             -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
>             -e 's/@@hostname@@/$(shell hostname)/g' \
>             -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) --version 2>&1 | head 
> -1)!g' \
>             -e 's/@@version@@/$(XEN_VERSION)/g' \
>             -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
>             -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
>             -e 's!@@changeset@@!$(shell ((hg parents --template "{date|date} 
> {rev}:{node|short}" >/dev/null && hg parents --template "{date|date} 
> {rev}:{node|short}") || echo "unavailable") 2>/dev/null)!g' \
>             < include/xen/compile.h.in > $@.new
>         @grep \" .banner >> $@.new
>         @grep -v \" .banner
>         @mv -f $@.new $@

> --
> Sander



Perhaps use about the same as linux has in scripts/setlocalversion ?

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 -d .git && 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

                # Update index only on r/w media
                [ -w . ] && git update-index --refresh --unmerged > /dev/null

                # Check for uncommitted changes
                if git diff-index --name-only HEAD | grep -qv 
"^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


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.