package: aegis
severity: grave
version: 4.24-5
thanks

Aegis fails to checkout old versions with aecp -ind correctly if files have been moved around in interesting ways. Details are below. The full thread starts at http://sourceforge.net/mailarchive/message.php?msg_id=26848688

I have marked the bug as found in the lenny version, too. But with the lenny version, this is only reproducible if the segfault
http://sourceforge.net/tracker/?func=detail&aid=3066593&group_id=224&atid=100224
would be fixed first.

---------- Forwarded message ----------
Date: Mon, 24 Jan 2011 17:33:36 +0100 (CET)
From: Stefan Fritsch <s...@sfritsch.de>
To: Walter Franzini <walter.franz...@gmail.com>
Cc: aegis-develop...@lists.sourceforge.net
Subject: Re: [Aegis-developers] aegis gets confused when renaming files

Hi Walter,

thanks for your help and sorry for the late response.

On Fri, 14 Jan 2011, Walter Franzini wrote:
The aecp -ind bug is fixed, you can get a compressed patch from

http://aegis.stepbuild.org/cgi-bin/aeget/aegis.4.24.C665/?aepatch+compat=4.16

This fixes some aecp -ind problems, but I found other problems that are not fixed. Again, the attached reprod4 script creates the repository and the verify4 script shows that aecp -ind produces wrong output.

If I'm not wrong you are a DD, so you can probably give me some advice
about the best/proper way to have these fixes in squeeze.  Actually only
RC bugs and translation updates are allowed to migrate to testing, so a
new upload in unstable will be blocked and not eligible for unblocking.

I think the inability of a revision control system to checkout old versions correctly is a grave bug and is therefore RC. I will open a bug report in the debian BTS.

The fix will likely be too late for Squeeze 6.0.0, but I am sure it is eligible for the first point release 6.0.1. To get an update into 6.0.1, you need to upload a package that fixes this bug but makes no other changes. Then ask debian-rele...@lists.debian.org for inclusion. If the fix is uploaded before 6.0.0, it can likely be propagated from unstable. If not, a separate upload to stable-proposed-updates will be necessary. If you need a sponsor for the upload, just ask.

Cheers,
Stefan
#!/bin/bash

. /usr/share/aegis/profile

set -eux

P=${1:-bug4}
U=$LOGNAME
TF=$(mktemp)
trap "rm -f $TF" EXIT

SNAPSHOTDIR=$(pwd)/snapshots.$P
if [ -e $SNAPSHOTDIR ] ; then
        echo "$SNAPSHOTDIR already exists"
        exit 1
else
        mkdir $SNAPSHOTDIR
fi

setup_devs () {
        aegis -new_developer $U  || true
        aegis -new_integrator $U || true
        aegis -new_reviewer $U   || true
}

snapshot () {
        DIR=$SNAPSHOTDIR/$AEGIS_PROJECT.C$AEGIS_CHANGE
        if [ -e $DIR ] ; then
                echo snapshot $DIR already exists
                exit 1
        fi
        aecd
        cp -rL . $DIR
}

nc () {
        EDITOR=true aegis -v -nc -p $AEGIS_PROJECT > $TF 2>&1
        cat $TF
        export AEGIS_CHANGE=$(grep aegis.*created $TF|perl -p -e 's/.*change 
([0-9]+):.*/$1/')
        aedb -p $AEGIS_PROJECT $AEGIS_CHANGE
        aecd
}

ec () {
        aecd
        sleep 1
        aed
        aeb
        snapshot
        sleep 1
        aede
        aeib
        sleep 1
        aecd
        aeb
        aed
        cd
        aeipass
}

nbr () {
        EDITOR=true aegis -v -nbr -p $AEGIS_PROJECT > $TF 2>&1
        cat $TF
        BR=$(grep aegis.*created $TF|perl -p -e 's/.*"(\S+)": created.*/$1/')
        BR=${BR#$AEGIS_PROJECT.}
        export AEGIS_PROJECT=$AEGIS_PROJECT.$BR
        setup_devs
}

ebr () {
        export AEGIS_PROJECT=${AEGIS_PROJECT%.$BR}
        export AEGIS_CHANGE=$BR
        aecd
        sleep 1
        aede
        aeib
        sleep 1
        aecd
        aeb
        aed
        sleep 1
        cd
        aeipass
}

setup_proj () {
        EDITOR=true aenpr $P.1
        export AEGIS_PROJECT=$P.1
        setup_devs
        PA=$(mktemp)
        cat > $PA << 'EOF'
description = "The \"$P\" program, branch 1.";
developer_may_review = true;
developer_may_integrate = true;
reviewer_may_integrate = true;
developers_may_create_changes = true;
umask = 022;
default_test_exemption = true;
default_test_regression_exemption = true;
minimum_change_number = 10;
reuse_change_numbers = true;
minimum_branch_number = 1;
skip_unlucky = false;
compress_database = false;
develop_end_action = goto_awaiting_integration;
protect_development_directory = false;
EOF
        aepa -file $PA
        rm -f $PA
        nc      
        aenf aegis.conf
        cat > aegis.conf << 'EOF'
build_command = "true";
development_directory_style = {
        source_file_symlink = true;
};
merge_command =
        "set +e; \
        merge -p -L baseline -L C$c ${quote $mostrecent} ${quote $original} \
        ${quote $input} > ${quote $output}; \
        test $? -le 1";
diff_command =
 "diff -pU10 ${quote $original} ${quote $input} >${quote $output} \
   || [ $? -eq 1 ] || grep \"^Binary files\" ${quote $output}";
architecture =
[
        {
                name = "unspecified";
                pattern = "*";
        }
];
history_create_command = "fhist ${b $h} -create -cu -i $i -p ${d $h} -r";
history_get_command = "fhist ${b $h} -e '$e' -o $o -p ${d $h}";
history_put_command = "fhist ${b $h} -create -cu -i $i -p ${d $h} -r";
history_query_command = "fhist ${b $h} -l 0 -p ${d $h} -q";
history_content_limitation = international_text;
EOF
        ec
}

newf () {
        FNAME=$1
        aenf $FNAME
        echo $FNAME > $FNAME
        echo created $AEGIS_PROJECT $AEGIS_CHANGE >> $FNAME
}

modf () {
        FNAME=$1
        aecp $FNAME
        echo modified $AEGIS_PROJECT $AEGIS_CHANGE >> $FNAME
}

mvf () {
        FNAME=$1
        NEWNAME=$2
        aemv $FNAME $NEWNAME
        echo mv $FNAME $NEWNAME $AEGIS_PROJECT $AEGIS_CHANGE >> $NEWNAME
}

rmf () {
        FNAME=$1
        aerm $FNAME
}


setup_proj

nbr
# 1.1

nc
# 1.1.C010
newf dir1/file1
ec

nc
# 1.1.C011
modf dir1/file1
ec

ebr

nbr
# 1.2

nc
# 1.2.C010
modf dir1/file1
newf dir2/file2
ec

ebr

nbr
# 1.3

nc
# 1.3.C010
mvf dir1/file1 dir2/file1
ec

nc
# 1.3.C011
modf dir2/file1
ec

ebr

nbr
# 1.4

nc
# 1.4.C010
newf dir3/file3
ec

ebr

###
# if we stop here, there will already be the first wrong result from aecp -ind
# continuing causes more failures

nbr
# 1.5

nc
# 1.5.C010
modf dir3/file3
ec

nc
# 1.5.C011
mvf dir2/file1 dir3/file1
ec

ebr

nbr
# 1.6

nc
# 1.6.C010
modf dir3/file3
ec

nc
# 1.6.C011
mvf dir2/file2 dir3/file2
ec

ebr

nbr
# 1.7

nc
# 1.7.C010
modf dir3/file2
ec

nc
# 1.7.C011
modf dir3/file2
ec


ebr

nbr
# 1.8

nc
# 1.8.C010
modf dir3/file3
ec

nc
# 1.8.C011
modf dir3/file1
ec

ebr



echo OK
#!/bin/bash

. /usr/share/aegis/profile

set -exu

P=${1:-bug4}
SNAPSHOTDIR=$(pwd)/snapshots.$P
RC=0
ERRORS=""

error () {
        echo "ERROR: $@"
        IFS='' ERRORS="$ERRORS $@"
        RC=1
}

mydiff () {
        diff -urN -x \*,D -x aegis.log "$@"
}

for b in 1 2 3 4 5 6 7 8; do
        for c in 10 11 12 13; do
                [ -d $SNAPSHOTDIR/$P.1.$b.C$c ] || continue
                cpdir=$(mktemp -d)
                cd $cpdir
                aecp -ind -p $P.1.$b -DELta_From_Change $c . ||
                        error "aecp -ind failed for $P.1.$b.C0$c"
                mydiff $SNAPSHOTDIR/$P.1.$b.C$c . ||
                        error "aecp -ind gave wrong result for $P.1.$b.C0$c"
                rm -rf $cpdir
        done
done

echo $ERRORS
exit $RC

Reply via email to